J'ai un bug dans mon script upload HELP!!!

Résolu
Messages postés
8
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
25 septembre 2006
-
Messages postés
8
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
25 septembre 2006
-
Voila j'ai fais un forumulaire d'upload avec un check de l'extention mais bon .. je ne comprends pas pourquoi il plante.. je débute en php donc je pense que l'erreur vient des if et elseif... mais j'ai besoin qu'on me corrige mon script... merci d'avance.

Mon forumulaire :
[...]
<form name="add_sfupload" method="post" action="add_sfupload_code.php" enctype="multipart/form-data">

    Ajouter un fichier :,

----

,
,

----

,

[...]

</form>

et voila mon Script... :

<?php
if(isset($_FILES['upload']))
{
unset($erreur);
$nom = $_FILES['upload']['name'];
$ext = '.'. substr(strrchr($nom, '.'), 1);
$ext = strtolower($ext); // On passe l'extension en minuscules
$ext = str_replace('.jpeg', '.jpg', $ext); // On remplace '.jpeg' par '.jpg'
$nom = strtolower(str_replace(' ', '_', $nom)); // On remplace les espaces dans le nom du fichier par un underscore, et on met le nom en minuscules.
$destination = '';
$max_file_size = 0;


    if( !is_uploaded_file($tmp_file) )
    {
        $erreur='Le fichier est introuvable';
    } elseif($ext '.jpg' OR $ext '.png' OR $ext == '.jpeg')
 {
  $destination = 'images/';
  $max_file_size = 1000000;
  
  if (!getimagesize($_FILES['upload']['tmp_name']))
  {
   exit("GD n'a pas reconnu le fichier en tant qu'image, script interrompu.");
  }
  elseif( file_exists($_FILES['upload']['tmp_name']))
  {
   exit("Fichier existant sur le serveur au mème nom!");
  }
  elseif( filesize($_FILES['upload']['tmp_name']) > $max_file_size)
  {
   exit("Fichier existant sur le serveur au mème nom!");
  }
 } elseif($ext '.zip' OR $ext '.rar')
 {
  $destination = 'download/';
  $max_file_size = 100000000;
  
  if( file_exists($_FILES['upload']['tmp_name']))
  {
   exit("Fichier existant sur le serveur au mème nom!");
  }
  elseif( filesize($_FILES['upload']['tmp_name']) > $max_file_size)
  {
   exit("Fichier existant sur le serveur au mème nom!");
  }
 }
 elseif( !move_uploaded_file($tmp_file, $content_dir . $name_file))
    {
        $erreur='Impossible de copier le fichier dans $destination';
    }
 if(!isset($erreur))
 {
  move_uploaded_file($_FILES['upload']['tmp_name'],$destination.$nom.$ext))
  $nom = $nom.$ext;
  exit("Envoi du fichier effectué avec succès. Adresse du fichier: '$nom'");
 }
 else{echo($erreur);}
}
?>

Merci pour l'aide... d'avance.

7 réponses

Messages postés
8
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
25 septembre 2006

Problème résolut il fallait dans $dest que je mette le path sur '../images/' et non 'images/' vala... tt simple lol
Messages postés
8
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
25 septembre 2006

j'ai ajouter la variable :

$tmp_file = $_FILES['upload']['tmp_name'];


ici :
<?php
if(isset($_FILES['upload'])) 
{ 
unset($erreur); 
$nom = $_FILES['upload']['name'];
******ICI*****
[...]


et corriger ça :
elseif( !move_uploaded_file($tmp_file, $content_dir . $name_file))
en :
elseif( !move_uploaded_file($tmp_file, $content_dir . $nom))

mais toujours rien... snif help
Messages postés
138
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
29 février 2008

Tiens un petit cadeau, voici la classe que j'ai créée :

<?php

function upload($champ_files, &$nom_fichier_transfere, $repertoire_destination, &$message,
                $extensions_autorisees_array=array('pdf','jpg','jpeg','gif','png'),
                $taille_max_fichier=2000000, $chmod=755)
{    /*Fonction qui transfère un fichier sur le serveur.
    Retourne true si le transfert s'est déroulé correctement, false sinon.

    Liste des paramètres :
    - $champ_files : $_FILES['nom_du_champ']
    - $nom_fichier_transfere (donnée-resultat) : Nom que l'on veut donner au fichier transféré
                                                 (modifié automatiquement si un fichier porte
                                                 déjà le même nom)
    - $repertoire_destination : Chemin relatif du répertoire dans lequel on veut transférer le fichier
    - $message (donnée-resultat) : Message généré par lors du transfert
    - $extensions_autorisees : Tableau contenant la liste des extensions des fichiers autorisées
    - $taille_max_fichier : Taille maximale (en octets) autorisée pour le fichier à transférer                            (Aide : 1Ko 1000 octets; 1Mo 1000000 octets)
    - $chmod : Chmod du fichier transféré*/

    /*Initialisations*/
    $upload_reussi = false;
    $message = '';    $extension $str_formats_autorises '';
   

    /*On vérifie que $nom_fichier_transfere et $repertoire_destination ne soient pas vides*/    if ($nom_fichier_transfere '' OR $repertoire_destination '')
        $message = 'Erreur : Vous devez préciser un nom à donner au fichier à transférer ainsi qu\'un répertoire de destination';

    /*On vérifie que la taille du fichier à transférer n'est pas trop importante*/
    elseif ($champ_files["size"] > $taille_max_fichier) //Si la taille de la fic est supérieure à la taille max
    {
        $taille_max_autorisee = $taille_max_fichier / 1000;

        $message =  'Erreur : La taille du fichier que vous voulez transférer est trop grande.
'.br().
        'Taille maximale autorisée : '.$taille_max_autorisee.' Ko';
    }

    else //Aucune erreur pour le moment
    {
        /*On supprime les accents et caractèers spéciaux*/
        $nom_fichier_transfere = clearStr($nom_fichier_transfere);

        /*On récupère l'extension du fichier envoyé*/
        $extension_fichier = substr(strchr($champ_files["name"],'.'),1);

        /*On récupère la liste des formats autorisés et on vérifie si l'extension du fichier est autorisée*/
        $extension_autorisee = false; //Initialisation

        foreach ($extensions_autorisees_array as $extension)
        {
            $str_formats_autorises .= $extension.', ';

            /*On vérifie si l'extension du fichier est autorisée*/
            if (!$extension_autorisee AND $extension_fichier == $extension)
                $extension_autorisee = true;
        }

        /*Suppression de la ,(virgule) à la fin de $str_formats_aurorises*/
        $str_formats_autorises = implode(', ', $extensions_autorisees_array);

        if (!$extension_autorisee) //Si le format du fichier n'est pas valide
        {
            $message =     'Erreur : Le fichier que vous voulez transférer ne porte pas une extension autorisée.
'.br().
            'Extension du fichier que vous voulez transférer : '.$extension_fichier.'
'.br().
            'Extenstions autorisées : '.$str_formats_autorises;

        }
        else //Format valide
        {
            /*Si le fichier existe on le renomme de la forme nomDuFichier(X).extension*/

            /*Initialisations*/
            $i = 0;
            $extension = '.'.$extension_fichier;
            $nom_fichier_transfere = str_replace($extension,'',$nom_fichier_transfere);

            /*On renomme le fichier tant qu'un fichier porant le même nom existe*/
            while (file_exists($repertoire_destination.$nom_fichier_transfere.$extension))
            {
                /*Suppression de l'éventuel (X) existant*/
                $nom_fichier_transfere = str_replace('('.$i.')','',$nom_fichier_transfere);

                /*On incrémente le compteur*/
                $i++;

                /*Ajout de (X)*/
                $nom_fichier_transfere = str_replace($nom_fichier_transfere,$nom_fichier_transfere.'('.$i.')',$nom_fichier_transfere);
            }

            /*Nom de destination final*/
            $nom_fichier_transfere = $nom_fichier_transfere.$extension;

            if (is_uploaded_file($champ_files["tmp_name"])) //Si le fichier a été uploadé correctement
            {
                /*On renomme le fichier avec le nom du fichier envoyé (nom éventuellement maj)*/
                if (!rename($champ_files["tmp_name"], $repertoire_destination.$nom_fichier_transfere))
                {
                    $message .= "Envoi du fichier impossible";
                }
                else //Transfert réussi
                {
                    /*On modifie les chmod du fichier*/
                    chmod ($repertoire_destination.$nom_fichier_transfere,'0'.$chmod);

                    $upload_reussi = true; //Transfert réusssi

                    $message = "Le fichier a correctement été transféré !";
                }
            }
        }
    }
   
    return $upload_reussi;
}
?>
Messages postés
138
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
29 février 2008

Pour l'utiliser :

Ton formulaire :

<form name="add_sfupload" method="post" action="add_sfupload_code.php" enctype="multipart/form-data">

    Ajouter un fichier :,

----

,
,

----

,

[...]

</form>

et tu appelles le script comme suit :

<?php

$champ_files = "upload";
$nom_fichier_transferre = "nouveauNom";
$repertoire_destination = "monRepertoire/";
$message = "";

$reussi = upload($champ_files, $nom_fichier_transfere, $repertoire_destination, $message);

if ($reussi)
{
    echo "Le fichier s'appelle désormais $nom_fichier_transfere";
}

echo $message;

?>
Messages postés
8
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
25 septembre 2006

c'est une bonne base de travail.. mais si tu peux me dire comment faire pour pouvoir automatiser le fait que j'upload : un zip ou rar dans un dossier (upload) et les images dans un dossier (images), il faut encore que je puisse utiliser l'emplacement du fichier uploader comme une variable pour l'inscrire dans la base de donnée MySql...
 
pour ça il faut que je puisse faire la différence entre les types de fichier mais sans passé par le type MIME... cf autre navigateur pas forcement les mème MIME...
faire un code genre :

if isset blabl
{ [mes variables...]
   if $ext jpg or $ext png
   {
      [variables...]
   }   elseif $ext zip or $ext rar
   {
      [variables...]
   }
   else { exit ("Bad format files!")}
}
echo $mon_fichier = $destination/$fichier.$ext

mais impossible de faire ça je ne comprend pas...
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

As-tu essayer les expressions regulieres ? Cela pourrait resoudre ton probleme !!

Exemple (pour les fichiers zip) :
$Regex = '`.*\.zip`i';
if ( preg_match($Regex, $FichierAUper) === true )
{
// ... traitement
}

T'as juste a change l'extension dans la regex pour pouvoir verifier les zip ou les png !

@++
Messages postés
8
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
25 septembre 2006

Pour jean84 je ne connais pas les expressions regulieres... je suis plus que nouveau avec le php...

Mais j'ai fini mon script.. il ne fonctionne toujours pas.. et la c'est moi qui bug lol

au moment du move_uploaded_file il ne fait rien... pourtant toutes mes variable fonctionne testée avec des echo svp si vous avez une solution est-ce en raport avec le fait que je suis en localhost ? merci. pour info voila mon script fini :

<?php
if (empty($_POST['uploadname']))
{
 echo 'You must enter the number of the news.';
}
else
{
 if (!empty($_FILES['uploadfile']['name']))
 {
 $file = basename($_FILES['uploadfile']['name']);
 $ext = strrchr($_FILES['uploadfile']['name'], '.');
 $ext = substr($ext, 1);
   if (($ext 'jpg') or ($ext 'png'))
  {
   //echo 'ceci est une image';
   $dest='images/';
  }
  else
  {   if (($ext 'zip') or ($ext 'rar'))
   {
    //echo 'ceci est une archive';
    $dest='downlaod/';
   }
  }
 echo '', $dest ,'

';
 echo '', $file ,'

';
 echo '', $_FILES['uploadfile']['tmp_name'] ,'

';
 move_uploaded_file($_FILES['uploadfile']['tmp_name'], $dest . $file);
 }
 else
 {
 // enlever les accents
  echo 'You must set the target file for uploading.';
 }
}
?>