Accueil » Tutoriaux » PHP / SQL » Upload d'image
Upload d'image

Ce script vous explique (ou du moins essaye :) ) comment faire pour uploader une image. C'est juste un exemple, vous pouvez modifier le format des fichiers à uploader.

Tout d'abord vous devez faire un formulaire, voici un exemple : 
<form action="upload.php" enctype="multipart/form-data" method="post">

    <input name="fichier" size="30" type="file" />
    <input name="MAX_FILE_SIZE" type="hidden" value="16777216" />
    <input name="upload" type="submit" value="Uploader" />
</form>

Voici le script du fichier upload.php

<?php

if( isset($_POST['upload']) ) {  // si formulaire soumis
    $dossier = '/upload/'; // nom du dossier ou vont être stocké les images
    $fichier = basename($_FILES['fichier']['name']);
    $taille_maxi = 16777216;  // taille maximal du fichier
    $taille = filesize($_FILES['fichier']['tmp_name']);
    $extensions = array('.png', '.gif');
    $extension = strrchr($_FILES['fichier']['name'], '.');
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) { //Si l'extension n'est pas dans le tableau
         $erreur = 'Vous devez uploader un fichier de type png ou gif...';
    }
    if($taille>$taille_maxi) {
         $erreur = 'Le fichier est trop gros...';
    }
    if(!isset($erreur)) { //S'il n'y a pas d'erreur, on upload
         //On formate le nom du fichier
         $fichier = strtr($fichier,
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
         if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier)) { //Si l'upload a fonctionné...
              echo 'Upload effectué avec succès !';
         }
         else { // Sinon
              echo 'Echec de l\'upload !';
         }
    }
    else {
         echo $erreur;
    }
}

?>


Ce script est vraiment simple !

Attention ! Le dossier de destination doit avoir tous les droits ! (777).

Bon, je pense que quelques explications sont quand même nécessaire pour certains :

$fichier = basename($_FILES['fichier']['name']);

Permet de garder seulement le nom du fichier.
Par exemple si le chemin de votre image est :
"C:\Mes Documents\mon_image.png", alors $fichier prendra comme valeur "mon_image".

$taille = filesize($_FILES['fichier']['tmp_name']);

Permet de connaitre la taille de l'image envoyé. 

$extensions = array('.png', '.gif');

$extensions est un tableau qui prend (selon ce que vous définissez dans celui-ci) les extensions possibles.

$extension = strrchr($_FILES['fichier']['name'], '.');


Permet de connaitre l'extension du fichier envoyé.

Voici une liste des variables superglobale $_FILES :

  • $_FILES['fichier']['name'] : renvoit le nom du fichier stocké sur la machine du client qui envoit le fichier.
  • $_FILES['fichier']['tmp_name'] : renvoit le nom du fichier stocké sur le serveur (le fichier a donc été reçu).
  • $_FILES['fichier']['type'] : renvoit le type mime du fichier envoyé. Attention aux failles de sécurité.
  • $_FILES['fichier']['size'] : renvoit la taille du fichier en octets.
  • $_FILES['fichier']['error'] : renvoit éventuellement un code d'erreur pendant le transfert.

Normalement vous êtes maintenant capable de faire un systeme d'upload.