Forum und email

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($putdata1024)) {
    
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.