Chargements de fichiers par méthode POST
Cette fonctionnalité permet aux personnes de télécharger à la fois du texte et des fichiers binaires. Avec les fonctions d'identification et de manipulation de fichiers de PHP, vous avez le contrôle total pour définir qui a le droit de télécharger mais aussi ce qui sera fait du fichier une fois qu'il sera téléchargé.
PHP est capable de recevoir des fichiers émis par un navigateur conforme à la norme RFC-1867.
Note: Notes de configuration
Voir aussi les directives file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size et max_input_time dans php.ini
PHP supporte aussi le chargement par la méthode PUT comme dans le navigateur Netscape Composer et Amaya du W3C. Reportez-vous au chapitre sur le support de la méthode PUT.
Exemple #1 Formulaire de chargement de fichier
<?php // Dans les versions de PHP antiéreures à 4.1.0, la variable $HTTP_POST_FILES // doit être utilisée à la place de la variable $_FILES. $uploaddir = '/var/www/uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); echo '<pre>'; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "Le fichier est valide, et a été téléchargé avec succès. Voici plus d'informations :\n"; } else { echo "Attaque potentielle par téléchargement de fichiers. Voici plus d'informations :\n"; } echo 'Voici quelques informations de débogage :'; print_r($_FILES); echo '</pre>'; ?>
Le script PHP qui reçoit le fichier chargé doit pouvoir gérer le fichier de manière appropriée. Vous pouvez utiliser la variable $_FILES['userfile']['size'] pour recaler tous les fichiers qui sont trop gros ou trop petits. Vous pouvez utiliser la variable $_FILES['userfile']['type'] pour écarter les fichiers qui n'ont pas le bon type, mais l'utiliser uniquement pour une série de vérifications, car cette valeur est complètement sous le contrôle du client et n'est pas vérifiée du côté de PHP. Depuis PHP 4.2.0, vous pouvez utiliser l'information dans $_FILES['userfile']['error'] et adapter votre politique en fonction des codes d'erreur. Quelle que soit votre politique, vous devriez soit effacer le fichier du dossier temporaire, soit le déplacer.
Si aucun fichier n'est sélectionné dans le formulaire, PHP retournera 0 dans $_FILES['userfile']['size'] et rien du tout dans $_FILES['userfile']['tmp_name'].
Le fichier sera automatiquement effacé du dossier temporaire à la fin du script, s'il n'a pas été déplacé ou renommé.
Exemple #3 Envoi d'un tableau de fichiers
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "data/$name");
}
}
?>
La barre de progression de téléchargement peut être implémentée en utilisant la progression du chargement via les sessions.