Chargement par m�thode PUT

PHP supporte la m�thode HTTP PUT utilis�e par les navigateurs pour y stocker des fichiers sur un serveur. Les requ�tes de type PUT sont beaucoup plus simples que les chargements de fichiers en utilisant le type POST, et elles ressemblent � :

Exemple #1 M�thode PUT pour les chargements de fichiers

PUT /path/filename.php HTTP/1.1

Normalement, cela signifie que le client distant va sauver les donn�es qui suivent dans le fichier : /path/filename.php de votre disque. Ce n'est �videmment pas tr�s s�curis� de laisser Apache ou PHP �craser n'importe quel fichier de l'arborescence. Pour �viter ceci, il faut d'abord dire au serveur que vous voulez qu'un script PHP donn� g�re la requ�te. Avec Apache, il y a une directive pour cela : Script. Elle peut �tre plac�e n'importe o� dans le fichier de configuration d'Apache. En g�n�ral, les webmestres la placent dans le bloc <Directory>, ou peut-�tre dans le bloc <VirtualHost>. La ligne suivante fera tr�s bien l'affaire :

Exemple #2 Directive Apache pour le chargement par m�thode PUT

Script PUT /put.php

Elle indique � Apache qu'il doit envoyer les requ�tes de chargement par m�thode PUT au script put.php. Bien entendu, cela pr�suppose que vous avez activ� PHP pour qu'il prenne en charge les fichiers de type .php, et que PHP est actif. La ressource de destination pour toutes les requ�tes PUT de ce script doit �tre le script lui-m�me, et non le nom du fichier que le fichier t�l�charg� doit avoir.

Avec PHP, vous voudriez faire quelque chose comme ce qui suit dans votre put.php. Ceci va copier le contenu du fichier t�l�charg� dans le fichier myputfile.ext sur le serveur. Vous devez probablement vouloir effectuer quelques v�rifications et/ou identifier l'utilisateur avant d'effectuer cette copie de fichier.

Exemple #3 Sauvegarde de fichiers HTTP PUT

<?php
/* Les donn�es PUT arrivent du flux */
$putdata fopen("php://input""r");

/* Ouvre un fichier pour �criture */
$fp fopen("myputfile.ext""w");

/* Lecture des donn�es, 1 Ko � la fois
and write to the file */
while ($data fread($putdata1024))
fwrite($fp$data);

/* Fermeture du flux */
fclose($fp);
fclose($putdata);
?>