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 38-5. Méthode PUT pour les chargements de fichiers PUT /path/filename.html HTTP/1.1 |
|
Normalement, cela signifie que le client distant va sauver
les données qui suivent dans le fichier : /path/filename.html
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 38-6. Directive Apache pour le chargement par méthode PUT |
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 4 et suivant, 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 38-7. Sauvegarde de fichiers HTTP PUT avec PHP 4
<?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($putdata, 1024)) fwrite($fp, $data);
/* Fermeture du flux */ fclose($fp); fclose($putdata); ?>
|
|
Note :
Toute la documentation ci-dessous s'applique uniquement à PHP 3.
Exemple 38-8. Sauvegarde de fichiers HTTP PUT avec PHP 3
<?php copy($PHP_UPLOADED_FILE_NAME, $DOCUMENT_ROOT . $REQUEST_URI); ?>
|
|
Le seul piège est que lorsque PHP reçoit un chargement par méthode PUT,
il va enregistrer le fichier dans le dossier temporaire, tout comme
avec la méthode POST.
À la fin de la requête, le fichier sera effacé. Ce qui
fait que ce script doit placer le fichier chargé quelque part.
Le nom du fichier temporaire est placé dans la variable
globale $PHP_PUT_FILENAME, et la destination prévue est
placée dans $REQUEST_URI (ces noms peuvent
changer d'une configuration d'Apache à l'autre). Cette destination
est celle qui est demandée par le client, et vous n'avez pas
à obéir aveuglément au client. Vous pourriez
par exemple, déplacer le fichier dans un dossier de chargement.