Flux rss

[PHP] Upload de fichiers

Bookmark Ajouter aux favoris / Partager
Dernière mise à jour le 6 juillet 2009 à 11:02 par Jeff
Publié par Jeff
Le langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML.



Formulaire d'envoi de fichiers


La première chose à faire consiste à créer un formulaire HTML permettant à l'utilisateur d'ouvrir une boîte de dialogue permettant de choisir le fichier à envoyer :

<FORM method="POST" action="[votre fichier PHP pour l'upload.php]" ENCTYPE="multipart/form-data">
          <INPUT type=hidden name=MAX_FILE_SIZE  VALUE=2048>
          <INPUT type=file name="nom_du_fichier">
          <INPUT type=submit value="Envoyer">
</FORM>

Il est impératif de ne pas oublier l'attribut ENCTYPE="multipart/form-data" ! Le cas échéant, le formulaire n'aurait aucun effet.

Par ailleurs le champ MAX_FILE_SIZE est une indication de la taille maximum du fichier à uploader pour le navigateur, mais celà n'est pas suffisant pour s'assurer que les fichiers uploadés ne dépasseront pas une certaine taille dans la mesure où tous les navigateurs ne prennent pas systématiquement en compte cette valeur. La valeur de la taille maximale du fichier uplodé est ajustable "en dûr" dans le fichier de configuration php.ini.

Configuration de PHP pour permettre l'upload


Le fichier de configuration php.ini contient des directives permettant d'autoriser ou non l'envoi de fichiers via un formulaire ainsi que de le paramétrer :

file_uploads= On/Off permet d'autoriser ou non l'envoi de fichiers.
upload_tmp_dir = répertoire permet de définir le répertoire temporaire permettant d'accueillir le fichier uploadé.
upload_max_filesize = 2M permet de définir la taille maximale autorisée pour le fichier. Si cette limite est dépassée, le serveur enverra un code d'erreur.
post_max_size indique la taille maximale des données envoyées par un formulaire. Cette directive prime sur upload_max_filesize, il faut donc s'assurer d'avoir post_max_size supérieure à upload_max_filesize

Si vous n'avez pas accès à la configuration (cas d'un site hébergé sur le serveur du fournisseur d'accès ou dans le cas d'un hébergement mutualisé), vous pouvez vérifier la configuration grâce à la fonction phpinfo() :

<?
  phpinfo();
?>

Récupération du fichier avec PHP


Le fichier, ainsi que les informations le concernant, sont accessibles via la variable superglobale $_FILES[].
Pour afficher son contenu, vous pouvez utiliser le script suivant :

<pre><?  print_r($_FILES); ?></pre>

La sortie de ce code sera de la forme suivante :

Array
(
    [nom_du_fichier] => Array
        (
            [name] => MaBelleImage.jpg
            [type] => image/jpg
            [tmp_name] => chemin_complet_du_fichier_uploadé
            [error] => 0
            [size] => 1000
        )

) 

Dans le cas ci-dessus il s'agit d'une image JPEG pesant 1 Mo.


Les champs $_FILES[name], $_FILES[type], $_FILES|error], $_FILES[size] permettent d'effectuer des tests sur le type de fichier, sa taille, son nom et vérifier s'il y a eu des erreurs.

Ainsi, vous pouvez traiter les erreurs de la manière suivante :

<?      
if ($_FILES['nom_du_fichier']['error']) {
          switch ($_FILES['nom_du_fichier']['error']){
                   case 1: // UPLOAD_ERR_INI_SIZE
                   echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";
                   break;
                   case 2: // UPLOAD_ERR_FORM_SIZE
                   echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !");
                   break;
                   case 3: // UPLOAD_ERR_PARTIAL
                   echo "L'envoi du fichier a été interrompu pendant le transfert !";
                   break;
                   case 4: // UPLOAD_ERR_NO_FILE
                   echo "Le fichier que vous avez envoyé a une taille nulle !");
                   break;
          }
}
else {
 // $_FILES['nom_du_fichier']['error'] vaut 0 soit UPLOAD_ERR_OK
 // ce qui signifie qu'il n'y a eu aucune erreur
}
?>




Grâce à la fonction move_uploaded_files() il est possible de transférer l'image du répertoire temporaire vers un répertoire de destination :
<?

if ((isset($_FILES['nom_du_fichier']['fichier'])&&($_FILES['nom_du_fichier']['error'] == UPLOAD_ERR_OK))) {
$chemin_destination = '/var/www/fichiers/';
move_uploaded_file($_FILES['nom_du_fichier']['tmp_name'], $chemin_destination.$_FILES['nom_du_fichier']['name']);
}
?> 
Problème upload fichier ZIP Bonjour, J'ai un truc bizarre pour la mise à jour de mon site. Je suis chez free et j'utilise FTPExpert. Je fais ma petite mise à jour tranquillement et au moment de mettre la dernière touche, c'est-à-dire un fichier .zip : problème. Au lieu d'avoir... www.commentcamarche.net/forum/affich-1870662-probleme-upload-fichier-zip
Upload fichier sur serveur via javascript Bonjour, En fait j'ai réussi à charger un fichier sur le serveur, le renommer et puis le déplacer vers un un répertoire destination par un code php, voici un bout le code de la page azerty.php: www.commentcamarche.net/forum/affich-11723371-upload-fichier-sur-serveur-via-javascript
Site gratuit permettant le upload de fichiers Bonjour chers amis, je suis à la recherche d'un site gratuit permettant le upload de fichiers par differentes personnes mais, dont l'acces me serait attribué de façon exclusive. je recherche une capacité assez grande et une durée de quelques jours au... www.commentcamarche.net/forum/affich-2616575-site-gratuit-permettant-le-upload-de-fichiers
[Webmaster] Faire facilement un espace d'uploadPourquoi ? Il arrive que vous ayez besoin de mettre en place un petit espace de téléchargement (upload/download) pour stocker des fichiers sur votre site web. C'est en effet très pratique et peut dépanner quand vous n'avez pas de clé USB sous la... www.commentcamarche.net/faq/sujet-4308-webmaster-faire-facilement-un-espace-d-upload
Script upload de fichiers (php)salut, j'ecris en fait pour savoir si quelqu'un pourrais m'aider pour mettre en oeuvre un script d'upload de fichier ... j'ai trouve un tutorial a cette adresse : http://www.phpfrance.com/tutorials/index.php?id=10 mais meme en faisant simplement du... www.commentcamarche.net/forum/affich-97169-script-upload-de-fichiers-php
[PHP] Upload pour un type de fichier ^^Bonjour a vous, Voila je travail en ce moment pour un site professionnel et je suis embétée pour restreindre l'upload à un type de fichier. voila j'ai ceci dans mon code $type_file = $_FILES['fichier']['type']; if( !strstr($type_file, 'RAR') ) {... www.commentcamarche.net/forum/affich-2611737-php-upload-pour-un-type-de-fichier
PHP - Vérification des fichiers uploader (Résolu)Bonjour à tous, Je me demandais si c'était sécuritaire, lors de l'upload de ficher en PHP, de vérifier seulement l'extention au lieu du type ($_FILES['userfile']['type'][$i] != "image/pjpeg"). Car je me suis rendu compte que certain fichier que je... www.commentcamarche.net/forum/affich-6174432-php-verification-des-fichiers-uploader
Apache - Les fichiers .htaccessLes fichiers .htaccess sont des fichiers de configuration d'Apache, permettant de définir des règles dans un répertoire et dans tous ses sous-répertoires (qui n'ont pas de tel fichier à l'intérieur). On peut les utiliser pour protéger un répertoire... www.commentcamarche.net/contents/apache/apacht.php3
Fichier ISO (Image ISO)Format ISO Un fichier possédant l'extension .ISO est une image ISO, c'est-à-dire une image d'un disque (CD, DVD ou disque dur) sous forme de fichier, créer avec un logiciel de gravure. Comment lire un fichier ISO ? En l'absence de graveur, il... www.commentcamarche.net/contents/fichier/iso.php3
Fichier BINFormat BIN Les fichiers BIN et CUE sont respectivement : .BIN : une image de CD, c'est-à-dire une copie binaire d'un CD ou d'un DVD sous forme d'un fichier .CUE : informations sur les pistes du disque. Comment lire un fichier BIN ? Les... www.commentcamarche.net/contents/fichier/bin.php3