PUT metódusú feltöltések
A PUT feltöltés támogatása a PHP 3 és a PHP 4 között megváltozott. PHP 4-ben a PUT-al küldött adatok a szabványos bemenetről olvasva gyűjthetőek be.
Example#1 HTTP PUT által feltöltött állományok lementése PHP 4-ben
<?php
/* A PUT adatok a szabványos bemeneten érkeznek */
$putdata = fopen("php://stdin", "r");
/* Egy fájl nyitása Ãrásra */
$fp = fopen("myputfile.ext", "w");
/* Egyszerre 1KB olvasása és fájlba Ãrása */
while ($data = fread($putdata, 1024)) {
fwrite($fp, $data);
}
/* Az adatfolyan és a fájl zárása */
fclose($fp);
fclose($putdata);
?>
Note: A további bekezdések csupán a PHP 3-ra vonatkoznak már.
A PHP támogatja a HTTP PUT metódust is, amit például a Netscape Composer és a W3C Amaya használ. A PUT kérések sokkal egyszerűbbek, mint az eddig tárgyalt feltöltések. A következőképpen néz ki:
PUT /eleresi/ut/filenev.html HTTP/1.1
Ez hagyományosan azt jelenti, hogy a kliens a küldött adatokat az /eleresi/ut/filenev.html fájlba szeretné elmenteni a webgyökér alatt. Az nyilvánvalóan nem lenne jó megoldás az Apache vagy a PHP részérÅ‘l, ha bárkinek megengedné, hogy felülÃrja a fájlokat a web könyvtáradban. Éppen ezért a PUT kérések kezeléséhez be kell állÃtani a webszerver számára, hogy egy PHP szkriptnek küldje az ilyen bemenetet. Apache alatt ezt a Script direktÃvával teheted meg. Ez elhelyezhetÅ‘ szinte tetszÅ‘leges ponton az Apache konfigurációs fájlodban. Egy gyakori hely erre egy <Directory> blokk belseje, vagy esetleg egy <Virtualhost> blokk belseje. Például egy ilyen sor megoldja a feladatot:
Script PUT /put.php
Ez beállÃtja az Apache számára a PUT kérések kezelésére a put.php-t abban a környezetben, ahol ezt a sort elhelyezted a konfiguráláskor. Ez természetesen feltételezi, hogy a .php kiterjesztést a PHP kezeli és a PHP aktÃv.
A put.php fájlban aztán valami hasonlót tehetsz:
<?php copy($PHP_UPLOADED_FILE_NAME, $DOCUMENT_ROOT . $REQUEST_URI); ?>
Ez a kérés által meghatározott helyre másolja a küldött fájlt. Valós helyzetben természetesen szükséges valamilyen ellenÅ‘rzés, és/vagy felhasználóazonosÃtás, mielÅ‘tt esetleg felülÃrod egyik fontos fájlodat. A PHP a POST metódushoz hasonlóan egy ideiglenes fájlban tárolja a feltöltött fájlt. Amikor a kérés teljesÃtése befejezÅ‘dött, ez az ideiglenes fájl törlÅ‘dik. Ez azt jelenti, hogy a PUT kéréseket feldolgozó szkriptednek ezt a fájlt el kell mozgatnia máshova, ha meg szeretnéd tartani a feltöltött fájlt. Az ideiglenesen létrehozott fájl elérési útját a fájl nevével a $PHP_PUT_FILENAME váltózó tartalmazza, és a javasolt célt a $REQUEST_URI változó tartalmazza (bár ez lehet más is nem Apache szervereken). Ez a cél az, amit a kliens meghatározott. Neked nem kell feltétlenül ezt a helyet elfogadnod, lehet, hogy neked az a kényelmesebb (és biztonságosabb), hogy a feltöltött fájlokat egy speciális upload könyvtárban tárolod.