[PHP] Upload de fichier , pb avec la gestion du repertoire ?

Upload de fichier , pb avec la gestion du repertoire ? [PHP] - PHP - Programmation

Marsh Posté le 08-01-2003 à 20:12:45    

Salut à tous, j'ai un script php qui permet d'uploader des fichiers mais j'ai qques problemes :  
voilà les scripts (merci à phpfacile ;)
 
filepuload.html

Code :
  1. <html>
  2.     <body>
  3.         <form enctype="multipart/form-data" action="fileupload.php" method="post">
  4.             <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
  5.             Transfère le fichier <input type="file" name="monfichier" />
  6.             <input type="submit" />
  7.         </form>
  8.     </body>
  9. </html>


 
et voici fileupload.php :

Code :
  1. <html>
  2. <body>
  3. <?php
  4.     $repertoireDestination = "img/";
  5.     $nomDestination        = $_FILES["monfichier"]["name"];
  6.     // Pour raison de sécurité nous ajouterons aux fichiers
  7.     // portant une extension .php .php3, l'extension .txt
  8.     if (eregi(".php", $nomDestination)) {
  9.         $nomDestination .= ".txt";
  10.     }
  11.    
  12.     if (is_uploaded_file($_FILES["monfichier"]["tmp_name"])) {
  13.         if (rename($_FILES["monfichier"]["tmp_name"],
  14.                    $repertoireDestination.$nomDestination)) {
  15.             echo "Le fichier temporaire ".$_FILES["monfichier"]["tmp_name"].
  16.                  " a été déplacé vers ".$repertoireDestination.$nomDestination;
  17.         } else {
  18.             echo "Le déplacement du fichier temporaire a échoué".
  19.                  " vérifiez l'existence du répertoire ".$repertoireDestination;
  20.        }         
  21.     } else {
  22.        echo "Le fichier n'a pas été uploadé (trop gros ?)";
  23.     }
  24. ?>
  25. </body>
  26. </html>


 
Et il me met l'erreur : Le fichier n'a pas été uploadé (trop gros ?).
Mon dossier img se trouve pourtant bien dans le meme repertoire que ces deux scripts. Le truc, c'est que (je travaille avec easyphp 1.6) lorsque je v dans les propriétés de "img", il me dit qu'il est en lecture seule. Et j'ai beau décocher, ca se recoche toujours automatiquement....
A moins que le probleme ne vienne pas de là  :heink:  :heink:  
 
Pitié aidez moi !!!   :cry:  :pt1cable:  :pt1cable:


Message édité par Randy--- le 08-01-2003 à 20:15:08
Reply

Marsh Posté le 08-01-2003 à 20:12:45   

Reply

Marsh Posté le 09-01-2003 à 12:55:44    

Code :
  1. if (is_uploaded_file($_FILES["monfichier"]["tmp_name"]))
  2.       {
  3.         //blablabla
  4.       }
  5.       else
  6.       {
  7.            echo "Le fichier n'a pas été uploadé (trop gros ?)";
  8.       }


 
si tu obtiens le message d'erreur, c'est que le probleme vient du repertoire temporaire ou de l'upload en lui meme (taille du fichier / droit d'ecriture / repertoire mal défini ....)

Reply

Marsh Posté le 09-01-2003 à 13:13:10    

regarde dans la page phpinfo, il existe une limite de taille maxi de fichier ...
t'heberge ou sinon ?? chez toi ?

Reply

Marsh Posté le 09-01-2003 à 13:15:45    

c bon, pb résolu, c t juste un probleme de taille de fichier.  :ange:  
merci pour les réponses  :)

Reply

Marsh Posté le 09-01-2003 à 15:30:11    

bon j'ai fait mon script php pour l'upload avec :
-test de type de fichier et acceptation seulement des jpg ou gif.
-test du poids du fichier
-test de la larguer de l'image.
 
Tout marche nickel en local, mais en ligne (hebergement ovh), il chie dans la colle....Le script marche bien puisqu'il detecte lorsque le fichier ne correspond pas au bon format/taille/poids.
Mon algo prends le fichier temporaire et le renomme dans un dossier spécifié. Mais là :  

Code :
  1. Warning: rename() failed (No such file or directory)


pourtant en ligne le dossier spécifié existe bien.. j'ai fait un chmod 777 mais forcément le dossier se remet automatiquement en 755.... normal ? ou le probleme vient d'ailleurs ?  :heink:

Reply

Marsh Posté le 09-01-2003 à 17:18:26    

je viens duploader sur ovh :
 

Code :
  1. if ($fichier_size != 0)
  2. {
  3.  $nom = Space_escape($fichier_name);
  4.  copy($fichier, "./bannierespub/".$nom);
  5. }


 
sommaire, ( faut que je reecrive ca en php 4.2 ) mais aucun probleme de droit, et comme c pas mon serveur, je nai fait changement, juste créer mon repertoire.

Reply

Marsh Posté le 09-01-2003 à 17:22:23    

donc si c pas ovh comment ca se fait que ca marchait nickel en local et pas chez eux ???
y'a un truc ki m'echappe là , t'aurais pas une piste à me donner , vers où chercher le bug ?? :heink:

Reply

Marsh Posté le 09-01-2003 à 17:30:36    

le rename ?
 
et move_uploaded_file .. je connais pas.
je vais refaire mes quelques lignes de php demain je pense pr les rendre plus conforme avec un qqchose ressemblant au tien.

Reply

Marsh Posté le 09-01-2003 à 19:04:05    

si tu veux je te propose un deal : je mets mes lignes sur le post et en retour tu m'aides un peu sur mon probleme ?  :D

Reply

Marsh Posté le 09-01-2003 à 19:25:03    


jai testé ca :
bannieresub est en 755
c le 240plan de chez OVH
affiche les parametres de rename pr voir si il y a pas une erreur de syntaxe.
 

Code :
  1. // deplacement
  2. if (is_uploaded_file($_FILES["fichier"]["tmp_name"]))
  3. {
  4.      $nom = Space_escape($_FILES["fichier"]["name"]);
  5.      rename($_FILES["fichier"]["tmp_name"], "./bannierespub/".$nom);
  6. }
  7.         // copie
  8. if (is_uploaded_file($_FILES["fichier"]["tmp_name"]))
  9. {
  10.      $nom = Space_escape($_FILES["fichier"]["name"]);
  11.      copy($_FILES["fichier"]["tmp_name"], "./bannierespub/".$nom);
  12. }

Reply

Marsh Posté le 09-01-2003 à 19:25:03   

Reply

Marsh Posté le 09-01-2003 à 20:31:06    

bon allez zou, voilà mon fileupload.php

Code :
  1. <html>
  2. <body>
  3. <?php
  4.     $repertoireDestination = "img/";
  5.     $nomDestination        = $_FILES["imgevt"]["name"];
  6. {
  7.     if (is_uploaded_file($_FILES["imgevt"]["tmp_name"]))
  8.      {
  9.       $type=$_FILES["imgevt"]["type"];
  10.       if ($type=="image/pjpeg" )
  11.       {
  12.        $size = getimagesize($_FILES["imgevt"]["tmp_name"]);
  13.        if ($size[0] <= 550)
  14.         {
  15.         if (rename($_FILES["imgevt"]["tmp_name"],
  16.                   $repertoireDestination.$nomDestination)) 
  17.                    {
  18.                   print "<CENTER>";
  19.                echo "Le fichier à été téléchargé.";
  20.                print "<BR> Pour inserer cette image dans votre texte, copiez et coller la ligne suivante :<BR>";
  21.    highlight_string("\n <img src='administration/$repertoireDestination$nomDestination'> \n" );
  22.    print "<a href='#' onClick=window.close()>fermer la fenetre</A>";
  23.    print "</CENTER>";
  24.          }
  25.         else
  26.             {
  27.                echo "Le déplacement du fichier temporaire a échoué. Le nom existe peut etre deja.";
  28.                   print "<BR><CENTER><a href='fileupload.html'>revenir au chargement</A><CENTER>";
  29.             }
  30.            }
  31.           elseif ($size[0] > 550)
  32.            {
  33.            print "votre image est trop grande, veuillez la réduire";
  34.            print "<BR><CENTER><a href='fileupload.html'>revenir au chargement</A><CENTER>";
  35.            }
  36.      
  37.          }
  38.          elseif ($type=="image/gif" )
  39.       {
  40.        $size = getimagesize($_FILES["imgevt"]["tmp_name"]);
  41.        if ($size[0] <= 550)
  42.         {
  43.            if (rename($_FILES["imgevt"]["tmp_name"],
  44.                   $repertoireDestination.$nomDestination))
  45.                   {
  46.                   print "<CENTER>";
  47.                echo "Le fichier à été téléchargé.";
  48.                print "<BR> Pour inserer cette image dans votre texte, copiez et coller la ligne suivante :<BR>";
  49.    highlight_string("\n <img src='administration/$repertoireDestination$nomDestination'> \n" );
  50.    print "<a href='#' onClick=window.close()>fermer la fenetre</A>";
  51.    print "</CENTER>";
  52.         }
  53.         else
  54.            {
  55.                echo "Le déplacement du fichier temporaire a échoué. Le nom existe peut etre deja.";
  56.                   print "<BR><CENTER><a href='fileupload.html'>revenir au chargement</A><CENTER>";
  57.            }
  58.            }
  59.            elseif ($size[0] > 550)
  60.            {
  61.            print "votre image est trop grande, veuillez la réduire";
  62.            print "<BR><CENTER><a href='fileupload.html'>revenir au chargement</A><CENTER>";
  63.            }
  64.      
  65.          }
  66.          else
  67.        {
  68.        print "Ce fichier n'est pas une image";
  69.        print "<BR><CENTER><a href='fileupload.html'>revenir au chargement</A><CENTER>";
  70.        }
  71. else
  72. {
  73.  print "fichier trop gros !";
  74.  print "<BR><CENTER><a href='fileupload.html'>revenir au chargement</A><CENTER>";
  75. }
  76.    
  77.  
  78. }     
  79. ?>
  80. </body>
  81. </html>


 
et l'erreur correspondante :

Code :
  1. Warning: rename() failed (Invalid cross-device link) in /home/nomdomaine/www/administration/fileupload.php on line 17


 
et je suis en 60gp sur ovh , et le repertoire img est en 755


Message édité par Randy--- le 09-01-2003 à 20:32:32
Reply

Marsh Posté le 09-01-2003 à 20:35:08    

et je le rappelle : ca marche nickel en local !!!!!  :pt1cable:  :pt1cable:  :pt1cable:  :D  :cry:  :pt1cable:

Reply

Marsh Posté le 09-01-2003 à 21:18:19    

le code c'est bien gentil, mais ce qui est utile dans le cas présent, c la ligne du rename et ses parametres à l'execution  :o . Le code doit etre pas mal puisque ca semble fonctionner en local, faut se focaliser sur le probleme. Tu tournes en rond avec tes posts.

Reply

Marsh Posté le 09-01-2003 à 21:32:17    

comment je les connais les parametres du rename ?

Reply

Marsh Posté le 09-01-2003 à 21:40:01    

tu les affiches  :heink:

Reply

Marsh Posté le 09-01-2003 à 21:43:42    

euh moui donc comment je les affiche ?? :sarcastic:

Reply

Marsh Posté le 09-01-2003 à 21:56:00    


 
echo $_FILES["imgevt"]["tmp_name"];
echo $repertoireDestination.$nomDestination;
 
 [:shakalagoons] fais pas ton  :sarcastic:  
                             

Reply

Marsh Posté le 10-01-2003 à 01:57:15    


essaie avec copie,
mon test etait biaisé tt a lheure, jai uploadé 2 fois le meme fichier et avec le rename, ca a planté, mais comme le fichier etait deja present, jai cru que cetait bon.  
( mon affichage des erreurs est desactivé)
 
par contre, bien vu :

Code :
  1. // Pour raison de sécurité nous ajouterons aux fichiers  
  2.    // portant une extension .php .php3, l'extension .txt  
  3.    if (eregi(".php", $nomDestination)) {
  4.        $nomDestination .= ".txt";
  5.    }


super important des que lutilisateur peut uploader.

Reply

Marsh Posté le 10-01-2003 à 02:20:09    

OUf ca y est !!  
3 plombes que je faisais des tests ... alors en fait avec rename, la fonction ne marche pas , par contre, j'avais essayé avec le copy, et là ce marche nickel...
 
Pourtant avec le rename, j'ai balisé le chemin partout en vérifiant les variables, rien à faire j'ai pas trouvé où ca chiait...
Bref ca marche avec le copy, donc c parfait... Si jamais tu trouves l'explication du rename, chuis interessé :)
merci en tout cas, et désolé si j'ai été un peu brutal (en balancant mon script entier) et un peu naïf (mais désolé je suis débutant !! :) )

Reply

Marsh Posté le 10-01-2003 à 03:34:08    

3h31 .. je suis un true warrior, moi aussi, jai bataillé avec ma sécurité.
 
je suppose que rename n'a pas certains droits, genre effacer le fichier temporaire. Il pourrait préciser ca dans leur FAQ chez OVH.
 
film  ||  :sleep:  :??:  
 
 :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed