Forum und email

PUT methode ondersteuning

De PUT methode ondersteuning is sterk veranderd tussen PHP 3 en PHP 4 In PHP 4, wordt aangeraden om mbv de standaard input stream de inhoud van de HTTP PUT te lezen.

Example#1 Opslaan van HTTP PUT bestanden met PHP 4

<?php
/* PUT data komt binnen via de stdin stream */
$putdata fopen("php://stdin","r");

/* Open een bestand om naar te schrijven */
$fp fopen("myputfile.ext","w");

/* Lees de data 1kb per keer, en schrijf
deze daarna weg */
while ($data fread($putdata,1024))
  
fwrite($fp,$data);

/* Sluit alles af */
fclose($fp);
fclose($putdata);
?>

Note: De uitleg hieronder geld alleen voor PHP 3.

PHP ondersteunt ook de HTTP PUT methode welke gebruikt wordt door o.a. Netscape Composer en W3C Amaya. PUT aanvragen zijn veel simpeler dan een bestand uploaden en zien er ongeveer als volgt uit:

PUT /pad/bestandsnaam.html HTTP/1.1
     

Dit betekent normaal gezien dat de server het bestand ook als /pad/filename.html wilt opslaan. Dit is natuurlijk geen goed idee omdat je niet wilt dat anderen bestanden overschrijven in je web tree. Om zo'n 'request' te verwerken vertel je je server eerst met wat voor PHP script je dit request wilt verwerken. Met Apache kun je dit doen met het Script directive. Het kan ongeveer overal in je configuratie bestand geplaatst worden. Een standaard plaats hiervoor is bijvoorbeeld een <Directory> blok. Een enkele regel als voorbeeld:

Script PUT /put.php
     

Dit vertelt Apache om alle PUT requests waarvoor URIs die overeenkomen met de context waarin deze regel geplaatst is, naar het put.php script te sturen. We gaan er vanuit dat je de juist mime-headers heb gebruikt om PHP met de .php extensie te laten werken en dat PHP actief is.

In je 'put.php' zou je dan iets als volgt neer zetten:

<?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>

Dit kopieert het bestand naar de locatie welke gevraagd werd in het request. Waarschijnlijk zal je nog enige tests uitvoeren op het bestand voordat je het bestand daadwerkelijk kopieert. De enige truc hier is dat PHP het bestand opslaat in een tijdelijk bestand zoals bij de POST-methode. Zogauw het request is afgehandeld word het tijdelijke bestand verwijderd. Let dus op dat je script het tijdelijke bestand verplaatst of hernoemd. De naam van dit tijdelijke bestand is opgeslagen in de variable $PHP_PUT_FILENAME en je kunt de voorgestelde locatie vinden in $REQUEST_URI (Dit kan anders zijn bij niet-Apache web servers). Dit is nogmaals een suggestie van de gebruiker. Je hoeft deze suggestie niet te gebruiken, je kunt bijvoorbeeld alle bestanden in een speciale uploads directory plaatsen.