Cours par Webcam

Cours par Webcam

Formateur Web pour adultes depuis plus 11 ans, je vous propose des COURS collectifs par WEBCAM en LIVE pour booster vos connaissances et être autonome dans la création de site.

En savoir plus

PHP - Bases

PHP - Algorithmie

PHP - Chaîne

PHP - Tableau

PHP - Formulaires

PHP - Fonctions Usuelles

Données entres pages

Environnement et Interaction

PHP objet (POO)

Facebook
Twitter
LinkedIn

Upload de fichiers en PHP

Pour télécharger des fichiers sur le serveur, il vous faut un formulaire munis d’un champ de type file. Vous devez rajouter l’attribut enctype ayant pour valeur : ‘multipart/form-data’, ce qui veut dire que votre formulaire va pouvoir transférer des données de type binaire.

<form action="" method="post" enctype="multipart/form-data">
  <input type="hidden" name="MAX_FILE_SIZE" value="20000">
  <!-- Le champs 'hidden' doit être défini avant le champs 'file'  -->   
  <label>Votre fichier</label> :
  <input type="file" name="mon_fichier"><br>
  <input type="submit" value="Envoyer">
</form>

Pour récupérer votre fichier, vous avez à votre disposition le tableau superglobal $_FILES qui aura plusieurs entrées :

  • $_FILES[‘mon_fichier’][‘tmp_name’] : le nom temporaire du fichier sur le serveur
  • $_FILES[‘mon_fichier’][‘name’] : le nom original du fichier sur la machine cliente
  • $_FILES[‘mon_fichier’][‘type’] : le type MIME du fichier
  • $_FILES[‘mon_fichier’][‘size’] : la` taille du fichier

Avant de vouloir sauvegarder le fichier téléchargé il faut vérifier son envoi.

Gestion des erreurs d’envoi

Vous pouver gerer les erreurs de chargement avec $_FILES[‘mon_fichier’][‘error’] :

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
}

Explication

* La première erreur ‘UPLOAD_ERR_INI_SIZE’ concerne la taille maximum autorisé par votre serveur, cette dépend donc de votre hébergement.

* La deuxième erreur ‘UPLOAD_ERR_FORM_SIZE’ concerne la valeur maximum autorisée par le formulaire, elle est définie par le champs de type hidden dont le name doit impérativement avoir pour valeur MAX_FILE_SIZE. La taille est définie par l’attribut ‘value’.

<input type="hidden" name="MAX_FILE_SIZE" value="20000">

Le champs caché doit être appelé avec le champs de type file.

Note : l’attribut value est exprimée en octets.

*  La troisième erreur ‘UPLOAD_ERR_PARTIAL’ se produit si le transfert est interrompu et que le fichier est partiellement téléchargé.

* La dernière erreur ‘UPLOAD_ERR_NO_FILE’ concerne le transfert d’un fichier vide.

Dans le cas où le transfert n’échoue pas, vous pouvez envisager de sauvegarder le fichier.

Sauvegarder le fichier

Lors de l’envoi d’un fichier, son nom est mémoriser temporairement dans « $_FILES[‘mon_fichier’][‘tmp_name’] » et sera automatiquement détruit à la fin de l’exécution du script

La fonction move_uploaded_file() est utilisée pour le sauvegarder à un emplacement définitif

$nom = $_FILES['mon_fichier']['tmp_name'];
$nomdestination = './images/725.jpg';
move_uploaded_file($nom, $nomdestination);

La fonction accepte deux paramètres, le premier est le nom temporaire du fichier et le deuxième est son emplacement sur votre serveur. Dans cet exemple, le fichier est renommé ‘725.jpg’ et placé dans le répertoire ‘./image’.

Le code complet avec la gestion des erreurs serait donc ceci :

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{
  $nom = $_FILES['mon_fichier']['tmp_name'];
  $nomdestination = './images/725.jpg';
  move_uploaded_file($nom, $nomdestination);
}

Si vous voulez ignorer la gestion des erreurs lors d’un transfert, vous pouvez utiliser la fonction is_uploaded_file() qui indique si le fichier a été téléchargé par HTTP POST.

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
  $nom = $_FILES['mon_fichier']['tmp_name'];
  $nomdestination = './images/725.jpg';
  move_uploaded_file($nom, $nomdestination);
} else {
  echo "Attaque possible par téléchargement de fichier : ";
  echo "Nom du fichier : '". $_FILES['userfile']['tmp_name'] . "'.";
}

Cette méthode ne fournit cependant aucune information sur le type d’erreur.

A lire aussi

tutowebdesign

Afficher du contenu au scroll

Afficher du contenu au scroll Voici un effet impressionnant et pourtant très facile à mettre en place sur vos pages. Le principe consiste à faire

Lire »