Page PHP pour envoyer des fichiers

Petit nouveau ! | 1 Messages

05 avr. 2016, 14:35

Bonjour, j'ai un fichier PHP qui me permet d'envoyer des fichier image sur mon serveur.

Voici les pages concernées:

img_form.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <head>
    <title>Upload d'une image sur le serveur !</title>
	<style type="text/css">
body
{
font-family : Arial, Times, courrier;
font-size: 10px;
background-color:transparent
}

a:link,a:active,a:visited,a.postlink:link 
{ 
color: #2C3F5E;text-decoration: none;}

a:hover 
{
color: #708090;text-decoration: none;
}

input.button
{
font-weight: bold; 
cursor: hand; 
border: 1px solid #9D9D9D;color: black;input,textarea,select 
{
border: 1px solid Gray;
background: White; 
color: Black; 
font: normal 11px Verdana, Geneva, Arial, Helvetica, sans-serif;
}

</style>
  </head>
  <body>
    <!-- Debut du formulaire -->
   <form enctype="multipart/form-data" action="img_upload.php" method="post">
	<p><span style="font-weight:bold; font-size:12px;">Héberger une photo:</span><br/><br/>

            <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_SIZE; ?>" />
            <input name="fichier" type="file" id="fichier_a_uploader" /><br/>
			<span style="font-style:italic;"><strong>Taille max:</strong> 7Mo - <strong>Dimensions max:</strong> 2880x1620<br/>
			<strong>Fichiers acceptés:</strong> jpg, gif, png, jpeg, bmp</span><br/>
            <input type="submit" name="submit" value="Uploader" / class="button"/><br/>
	</p>
    </form>
    <!-- Fin du formulaire -->
  </body>
</html>
img_upload
<style type="text/css">
body
{
font-family : Arial, Times, courrier;
font-size: 12px;
background-color:transparent
}

a:link,a:active,a:visited,a.postlink:link 
{ 
color: #2C3F5E;text-decoration: none;}

a:hover 
{
color: #708090;text-decoration: none;
}

.iframe {
    border-bottom: #c2c2c2 1px solid;
    border-left: #c2c2c2 1px solid;
    border-right: #c2c2c2 1px solid;
    border-top: #c2c2c2 1px solid;
    font-size: 11px;
    color: #656052;
    background: #FBFCFC;
}

input.button
{
font-weight: bold; 
cursor: hand; 
border: 1px solid #9D9D9D;color: black;input,textarea,select 
{
border: 1px solid Gray;
background: White; 
color: Black; 
font: normal 11px Verdana, Geneva, Arial, Helvetica, sans-serif;
}

body
{
font-family : Arial, Times, courrier;
font-size: 12px;
background-color:transparent
}

a:link,a:active,a:visited,a.postlink:link 
{ 
color: #2C3F5E;text-decoration: none;}

a:hover 
{
color: #708090;text-decoration: none;
}

input.button
{
font-weight: bold; 
cursor: hand; 
border: 1px solid #9D9D9D;color: black;input,textarea,select 
{
border: 1px solid Gray;
background: White; 
color: Black; 
font: normal 11px Verdana, Geneva, Arial, Helvetica, sans-serif;
}
</style>
<?php
 
/************************************************************
 * Script realise par Emacs
 * Crée le 19/12/2004
 * Maj : 23/06/2008
 * Licence GNU / GPL
 * [email protected]
 * http://www.apprendre-php.com
 * http://www.hugohamon.com
 *
 * Changelog:
 *
 * 2008-06-24 : suppression d'une boucle foreach() inutile
 * qui posait problème. Merci à Clément Robert pour ce bug.
 *
 *************************************************************/
 
/************************************************************
 * Definition des constantes / tableaux et variables
 *************************************************************/
header( 'content-type: text/html; charset=utf-8' );
// Constantes
define('TARGET', 'fichiers/');    // Repertoire cible
define('MAX_SIZE', 7000000);    // Taille max en octets du fichier
define('WIDTH_MAX', 2880);    // Largeur max de l'image en pixels
define('HEIGHT_MAX', 1620);    // Hauteur max de l'image en pixels
 
// Tableaux de donneesZ
$tabExt = array('jpg','gif','png','jpeg', 'bmp', 'xlsx', 'xls', 'xlsm', 'docx', 'doc', 'txt' );    // Extensions autorisees
$infosImg = array();
 
// Variables
$extension = '';
$message = '';
$nomImage = '';
 
/************************************************************
 * Creation du repertoire cible si inexistant
 *************************************************************/
if( !is_dir(TARGET) ) {
  if( !mkdir(TARGET, 0755) ) {
    exit ('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');
  }
}
 
/************************************************************
 * Script d'upload
 *************************************************************/
if(!empty($_POST))
{
  // On verifie si le champ est rempli
  if( !empty($_FILES['fichier']['name']) )
  {
    // Recuperation de l'extension du fichier
    $extension  = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
 
    // On verifie l'extension du fichier
    if(in_array(strtolower($extension),$tabExt))
    {
      // On recupere les dimensions du fichier
      $infosImg = getimagesize($_FILES['fichier']['tmp_name']);
 
      // On verifie le type de l'image
      if($infosImg[2] >= 1 && $infosImg[2] <= 14)
      {
        // On verifie les dimensions et taille de l'image
        if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE))
        {
          // Parcours du tableau d'erreurs
          if(isset($_FILES['fichier']['error']) 
            && UPLOAD_ERR_OK === $_FILES['fichier']['error'])
          {
            // On renomme le fichier
            $nomImage = md5(uniqid()) .'.'. $extension;
 
            // Si c'est OK, on teste l'upload
            if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage))
            {
			  $valide = 'http://www.guilde-trilogy.fr/up-prive/fichiers/'.$nomImage;
            }
            else
            {
              // Sinon on affiche une erreur systeme
              $message = 'Problème lors de l\'upload !';
            }
          }
          else
          {
            $message = 'Une erreur interne a empêché l\'uplaod de l\'image';
          }
        }
        else
        {
          // Sinon erreur sur les dimensions et taille de l'image
          $message = 'Image trop grande ou trop lourde!';
        }
      }
      else
      {
        // Sinon erreur sur le type de l'image
        $message = 'Le fichier à uploader n\'est pas une image !';
      }
    }
    else
    {
      // Sinon on affiche une erreur pour l'extension
      $message = 'L\'extension du fichier n\'est pas autorisée !';
    }
  }
  else
  {
    // Sinon on affiche une erreur pour le champ vide
    $message = 'Vous devez choisir un fichier !';
  }
}

      if( !empty($valide) ) 
      {
		echo "<p><strong>Félicitation !</strong><br/>";
		echo "<p>Copiez ce lien et insérez votre image.<br/>";
        echo "<input type='text' name='truc' class='iframe' value='$valide' onclick='javascript:this.focus(); this.select();' size='42'/><br/><br/>";
		echo "<a href='http://www.guilde-trilogy.fr/up-prive/'/>Envoyer une nouvelle photo</a></p>";
      }
	  if( !empty($message) ) 
      {
        echo '<p>',"\n";
        echo "\t\t<strong>", htmlspecialchars($message) ,"</strong>\n";
        echo "<br /><a href='javascript:history.go(-1)'/>Retour</a></p>\n\n";
      }
 
?>

Ce scripte permet d'envoyer des image (avec extentions autorisé) au serveur. Il fonctionne parfaitement bien.
Hors, j'ai essayer d'ajouter 'xlsx', 'xls', 'xlsm', 'docx', 'doc', 'txt' dans les extensions autorisés, mais cela ne fonctionne pas. Il y a une ligne je crois qui vérifie si le fichier est bien une image, mais je souhaiterais la supprimer afin de pouvoir envoyer tout type de fichiers dont l’extension est autorisé.

Merci pour votre aide :) a bientôt

Mammouth du PHP | 1967 Messages

05 avr. 2016, 15:59

Tu recois un message d'erreur lorsque tu envoi un xls non ?

Ce message d'erreur peut facilement être trouvé dans ton fichier et tu remarqueras qu'il se trouve dans une instruction else.
C'est donc l'instruction IF correspondante qui te pose problème.
Mais ce if tu le remarqueras car ce code est bien documenté (en français qui plus est) vérifie le type de l'image puis les dimensions de l'image est vérifié.
Il peut être intéressant pour toi de garder la vérification de taille si le fichier est une image dans ce cas, c'est ton message d'erreur qui doit être remplacé par les instruction de sauvegarde du fichier.

Je suis persuadé qu'avec les commentaires et un peu de réflexion tu y arriveras tout seul.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube