Salutations!

J'ai fait ce uploader qui fonctionne très bien. Mais il a peut-être besoin d'être optimisé.

Si ce script peut inspirer quelqu'un, c'est avec plaisir d'en faire ma contribution si cela m'est permis.

Je suis relativement débutant mais je travaille très fort pour apprendre et ainsi me perfectionner. Aussi, c'est mon passe-temps préféré.

Le script :

<?php
  function authentification() {
  header('WWW-Authenticate: Basic realm="Uploader 2010.5.r2 par DAN"');
  header('HTTP/1.0 401 Unauthorized');
  echo "Vous devez entrer un identifiant et un mot de passe valide pour accéder à cette partie\n";
  exit;
  }

  //Pas toucher en haut de cette ligne
  //Configuration :
  //-----------------------------------------------------------------------------------------------------------------------------------//
  $dossier = 'upload/';   //sous-dossier contenant les fichiers uploadés avec slash à la fin
  $largeur = '320';       //largeur en pixel
  $hauteur = '240';       //hauteur en piexel
  $resolution = '80';     //réduction en pourcentage
  //-----------------------------------------------------------------------------------------------------------------------------------//
  //Pas toucher en bas de cette ligne
 
  if (!isset($_SERVER['PHP_AUTH_USER'])) {
  authentification();
  }
  else  {
  $auth = file(".htpasswd");
  list($user, $password) = split(":", trim($auth[0]));
  if(md5($_SERVER['PHP_AUTH_PW']) != $password)  {
    authentification();
    }
  }
  // Le passe par défaut est "admin" en md5 est ":21232f297a57a5a743894a0e4a801fc3" à placer dans ".htpasswd". Pas de login.
  
  echo '<table align="center"><tr><td align="center">';
  echo '<H2>Uploader 2010.5.r2 par DAN</H2>';


  //séparer en groupe de trois les nombres.
  function grosNombre($nombre)
  {
  if (intval($nombre) >= 1000)
  {
  $rev = strrev(strval($nombre));
  $nombre = '';
  for ($i = 0; $i < strlen($rev); $i++)
  {
  if ($i > 0 and $i % 3 == 0)
  $nombre .= ' ';
  $nombre .= $rev[$i];
  }
  $nombre = strrev($nombre);
  }
  return $nombre;
  }
  

  //vérification des fichiers images.
  $fichier = basename($_FILES['image']['name']);
  $taille_maxi = pow(2,20)*2;
  $taille = filesize($_FILES['image']['tmp_name']);
  $extensions = array('.jpg','.jpeg');
  $extension = strrchr($_FILES['image']['name'], '.'); 
  
  if(!in_array($extension, $extensions))
  {
       $erreur = ' Vous devez uploader un fichier de type <strong>JPG</strong>, de la taille de <strong>' . grosNombre($taille_maxi) . ' Octets</strong> Max. <br /><strong>ATTENTION: s\'il existe, il sera écrasé!.</strong><br /><br />';
  }
  if($taille>$taille_maxi)
  {
       $erreur = ' Le fichier est trop gros... <br /><br />';
  }
  if(!isset($erreur)) 
  {
       $fichier = strtr($fichier, 
            'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
            'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
       $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
       if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $fichier)) 
       {
            $source_pic = $dossier.$fichier;
            $destination_pic = $dossier.$fichier;

            $max_width = $largeur;
            $max_height = $hauteur;

            $src = imagecreatefromjpeg($source_pic);
            list($width,$height)=getimagesize($source_pic);

            $x_ratio = $max_width / $width;
            $y_ratio = $max_height / $height;

            if( ($width <= $max_width) && ($height <= $max_height) ){
                $tn_width = $width;
                $tn_height = $height;
                }elseif (($x_ratio * $height) < $max_height){
                    $tn_height = ceil($x_ratio * $height);
                    $tn_width = $max_width;
                }else{
                    $tn_width = ceil($y_ratio * $width);
                    $tn_height = $max_height;
            }

            $tmp=imagecreatetruecolor($tn_width,$tn_height);
            imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);

            imagejpeg($tmp,$destination_pic,$resolution);
            imagedestroy($src);
            imagedestroy($tmp);
            
            echo 'Upload effectué avec succès ! <br />Fichier : <strong><input type="text" value="http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/' . $dossier . $fichier . '" size="100"></input></strong><br /><br />';
            echo '<img src="'.$dossier.$fichier.'"><br /><br />';
       }
            else 
       {
            echo ' Echec de l\'upload ! <br /><br />';
       }
  }
  else
  {
       echo $erreur;
  }

  ?>
  <form method="POST" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" enctype="multipart/form-data">
     <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $taille_maxi; ?>">
     <label for="image">Image : </label><input type="file" name="image" id="image">
     <input type="submit" name="envoyer" value="Envoyer le fichier">
  </form>


  <?php
  // Suppression de fichier par menu déroulant.
  if(!empty($_POST['fichierdel'])) {  
  $fichierdel = $_POST['fichierdel'];
  if (!file_exists($fichierdel)) { print(''); } else { unlink($fichierdel); echo 'Fichier supprimé : [ <strong>'; echo strtolower(substr(strrchr($fichierdel,  "/" ), 1)); echo '</strong> ]<br /><br />'; }
  } else { print('<stong>LISTE DE FICHIER(S) :</strong><br />'); }
  ?>
  <form method="POST" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" name="submitted">
  
  <select name="fichierdel" style="width:200px;margin-left:10px;" size="3">
  
  <?php
  $open = opendir($dossier); 

  while ($filedel = readdir($open)) 
  {
        if (is_file($dossier.$filedel)) 
        {
                $extensiondel = strtolower(substr(strrchr($filedel,  "." ), 1));
                $extsupport = array("jpg", "jpeg");
                if (in_array($extensiondel, $extsupport) and ($filedel[0] != "#")) 
                {
                        $filesdelete = $dossier.$filedel;                         

                            {
                            echo '<option value="' . $filesdelete . '">' . ' » ' .strtoupper($filedel) . '</option>';
                            }
                }
        }
  }
  closedir($open);
  ?>
  </select>
  <br /><br />
  <table width="100" align="center">
  <tr><td width="50" align="left"><input name="rad" type="radio"  value="No" onclick="this.form['sub'].disabled=false" onfocus="if(this.blur)this.blur();">           </td><td>Supprimer?</td></tr>
  <tr><td width="50" align="left"><input name="rad" type="radio"  value="Yes" onclick="this.form['sub'].disabled=true" onfocus="if(this.blur)this.blur();" checked>   </td><td>Désactivé!</td></tr>
  <tr><td colspan="2" align="center" height="55"><input type="submit" name="sub" value="Supprimer le fichier" disabled></td></tr>
  </table>
  </form>


  </td></tr></table>

Les images vous indiqueront ce que ça fait. 

upload/29862-screenshot.jpg upload/29862-screenshot.jpg

Bien à vous et bonne journée!