IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Upload de fichier


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut [Upload] Upload de fichier
    Bonsoir,
    Je viens "Implorer votre aide", car je suis face à un problème et je sèche totalement. Cela fait plusieurs heures que j'essaie de comprendre pourquoi la fonction move_uploaded_file au sein de mon script ne fonctionne pas.

    Voilà ma config : je suis sur un server virtuel chez 1and1, sur Apache2 en mode sécurisé ( j'ai aussi fait des test en mode non sécurisé, pas de différence). Je souhaite uploader une photo, et l'upload bloque à ce niveau là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if( !move_uploaded_file($tmp_file , $destination'.jpg') )
    	{
               // Affiche une erreur
     
            }
    else{ //OK }
    J'ai fait des tests et ai affiché quelques variables :
    Voici le var_dump de la variable $_FILES ( Tout est normal ) :
    array(1) { ["photo"]=> array(5) { ["name"]=> string(23) "colliers-2422911126.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpLkwxwq" ["error"]=> int(0) ["size"]=> int(17166) } }

    La photo est bien uploadée, elle est bien reconnue comme Jpeg, sa taille est bonne (meme que sur mon disque), pas d'erreur affichée ... rien.

    Si vous avez une idée sur comment régler ce problème.... HEEEEEELP !!!

    Merci d'avance.

    PS : Ce script marche trés bien sur mon pc en local (sous windows )

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par cyrilskof Voir le message
    Bonsoir,
    Je viens "Implorer votre aide", car je suis face à un problème et je sèche totalement.
    PS : Ce script marche trés bien sur mon pc en local (sous windows )
    Si ton PHP marche en local, c'est que le PHP est bon

    S' il ne marche pas sur ton serveur, c'est que
    les fonctions traitement image de PHP ne sont pas activées
    OU les droit en ecriture sur les répertoires non donnés
    OU la taille maxi et temps d'attente sont mal configurés .... etc ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut re
    J'ai ajouté cette ligne avant le move_uploaded_file :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chmod($tmp_file, 0777);
    Ca ne change rien, de plus voilà les droits pour les uploads :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;
     
    ; Whether to allow HTTP file uploads.
    file_uploads = On
     
    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    ;upload_tmp_dir = 
     
    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 2M
    Sinon pour le time :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ;;;;;;;;;;;;;;;;;;;
    ; Resource Limits ;
    ;;;;;;;;;;;;;;;;;;;
     
    max_execution_time = 30     ; Maximum execution time of each script, in seconds
    max_input_time = 60	; Maximum amount of time each script may spend parsing request data
    memory_limit = 32M
    La franchement je vois pas quoi faire ??

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut Je devient fou
    Voilà, j'ai aussi essayé la fonction rename et copy,
    et celles ci non plus ne fonctionnent pas ? ETrange quand même.

    Toutes les fonction de copie ou de renommage de fichier ne fonctionnent pas et ne me retourne aucune erreur.

    Une idée?

    PS : le fichier tmp ou est stocké l'image est en 777 + sticky bit ( j'ai essayé sans et ca ne marche pas non plus ) de plus le fichier temporaire est bien préset et lui aussi possède tous les droits nécessaires.
    Je suis sous plesk ! Peut etre un probleme d'acces du à plesk ?

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par cyrilskof Voir le message
    Voilà, j'ai aussi essayé
    Bon alors entendons nous ... c'est provisoirement le répertoire ou tu veux qu'arrive l'image qui doit étre déprotégé et sans htaccess non plus !!

    Si c'est OK,
    crées deux PHP que voici écris leurs noms en minuscule
    prépares sur ton micro une image jpeg de 10Ko maxi ...

    upload_base_saisie.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?PHP             
    if (isset($_GET["message"])) $message=trim($_GET["message"]);
        else $message="";
    if (isset($_GET["Limg"])) $Limg=trim($_GET["Limg"]);
        else $Limg="";
    ?>
    <html><body>
    <br /><br /><br />
    <p align=center>
    <?PHP
    echo ("".$message."<br />");
    if ($Limg!="") echo ("<img src='".$Limg."' alt='' ><br />");
    ?>
     
    <br /><br /><br />
    <form name="formulaire" method="POST"
     action="upload_base_upload.php"  enctype="multipart/form-data" >
     <input type="hidden" name="MAX_FILE_SIZE" value="40000" />
     <input id="fichier1"  name="fichier1" type="file"  /><br />
     <input value="Valider" name="submit" type="submit" />
    </form>
    </p>
    </body>
    </html>

    Puis upload_base_upload.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?php
    if (isset($_FILES['fichier1'])) $LeFic=trim($_FILES['fichier1']['name']);
        else $LeFic="";
    $message="";
    if(  $LeFic!="" )
     {
     $poid_max="40000"; 
     $destin="0workdesti/"; 
     $taille = getimagesize($_FILES['fichier1']['tmp_name']);
     $poid = filesize($_FILES['fichier1']['tmp_name']); 
     $message="";
     
     if(substr($LeFic,-3) !="jpg")
       {$message="L image doit etre au format jpeg jpg";}
     if ($poid>$poid_max)
      {$message=" l image est trop lourde ... 40 Ko maxi";}
     if ($poid<=$poid_max && $message=="")
      {
       // === on supprime les accents et les espaces du nom de l'image 
       $LeFic = strtr($LeFic,  "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",   
        "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");  
       // === on supprime les espaces
       $LeFic=str_replace(" ","_",$LeFic);
       // === on met en minuscule
       $LeFic=strtolower($LeFic); 
       $newnom=$destin.$LeFic;
       if (file_exists($destin.$LeFic))
         {
            $message="L image est déjas sur le site web";
         }
         else
          {
          copy($_FILES['fichier1']['tmp_name'],$destin.$LeFic);
          $imagefile=$destin.$LeFic;
          $src_img = imagecreatefromjpeg($imagefile);
          $message="L image ".$newnom." est copiée";
         }
      }
     }
     
    $Limg=$imagefile;
    print "<script type='text/javascript'>window.location='upload_base_saisie.php?Limg=".$Limg."&message=".$message."'</script>";
    exit;
    ?>
    mets les dans la racine de ton site web
    mais avant dans
    upload_base_upload.php
    remplace
    $destin="0workdesti/"; PAR TON REPERTOIRE DESTINATION
    puis lance
    upload_base_saisie.php

    tiens moi au courant

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut Re,
    Déjà merci pour ta réponse,
    Je ne peux actuellement pas essayer ca immédiatement, je le ferai ce soir. En revanche, mon repertoire de destination est totalement déprotégé et sans htaccess. Je l'ai déjà vérifié. Le dossier dans lequele je souhaite envoyé la photo est en 755.

    J'aisseaireai ce que tu m'a conseillé ce soir mais je doute que cela fonctionne.


  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par cyrilskof Voir le message
    Déjà merci pour ta réponse,
    Le dossier dans lequele je souhaite envoyé la photo est en 755.
    J'aisseaireai ce que tu m'a conseillé ce soir mais je doute que cela fonctionne.
    Ah bien sur tu peux douter TU AS RAISON
    car 755 veux dire pour un visiteur écriture interdite
    donc 777 !

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Par défaut
    Essais cette fonction pour savoir l'erreur de retour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    	/* affiche les informations du téléchargement 
    	** retourne true en cas d'erreur, false si l'upload est ok
    	** passer un paramètre affiche les infos d'erreurs
    	*/
    	function error( $i = NULL ){
    		$message = '';
    		$err = '';		
     
    		if( $err = @$_FILES[ LE_NOM_DE_TON_CHAMP_FICHIER_ICI ]['error'] ){
     
                            if( $err == UPLOAD_ERR_INI_SIZE ){
    				$message = '*File oversize (php.ini upload_max_filesize)*';
    			}elseif( $err == UPLOAD_ERR_FORM_SIZE ){
    				$message = '*File oversize (html MAX_FILE_SIZE)*';
    			}elseif( $err == UPLOAD_ERR_PARTIAL ){
    				$message = '*File not complete*';
    			}elseif( $err == UPLOAD_ERR_NO_FILE  ){
    				$message = '*No file uploaded*';
    			}elseif( $err == UPLOAD_ERR_NO_TMP_DIR ){
    				$message = '*No temporary directory*';
    			}elseif( $err == UPLOAD_ERR_CANT_WRITE  ){
    				$message = '*Writing impossible*';
    			}elseif( $err == UPLOAD_ERR_EXTENSION  ){
    				$message = '*Bad extension*';
    			}
    		}
     
    		if( is_null( $i ) ){
    			if( $err === 0 ){
    				return false;
    			}else{
    				return true;
    			}
    		}else{
    			if( $err === 0 ){
    				echo '*File uploaded*';
    				return false;
    			}else{
    				echo $message;
    				return true;
    			}		
    		}
    	}

  9. #9
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par LDDL Voir le message
    Essais cette fonction pour savoir l'erreur de retour !
    Si tu as lu ce Fil, tu sais que tout marche ! sauf le répertoire qui avait un mode incorecte !

    Cependant cela peut aider cyrilskof d'avoir pour une autre occasion, ta méthode de control, a ce sujet ce serait bien sur son code de lui expliquer comment s'en servir

    Merci

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut Réponse !!
    Alors par miracle je suis arrivé à ne pas trouver l'erreur.

    En fait je disais des bétises, tous mes fichiers sont en 777, donc le probleme n'était pas la. Par contre mon script ne m'affichait aucune erreur, et ca ce me posait probleme.

    J'ai donc du trifouiller le php.ini afin de changer les variables :
    display_errors = On
    display_startup_errors = On

    Une fois ces variables changées il m'est apparu des erreurs de droits. Cependant celles ci ont été causé à cause de mes nombreux test. J'ai donc décidé de remmetre mon fichier d'origine sur le serveur et Là : Miracle. Ca marche. Pourquoi ???

    La cause la plus plausible serait que j'avais testé le script une première fois. Qu'il ne marchait pas => Je l'ai modifié (à ce moment là il ne marchait plus, mais ne le savait pas )
    => Puis ai modifié certains paramètres du php.ini en oubliant de redémarrer le serveur Apache... Etc Etc
    En gros un beau bordel...

    Une foule de petits problemes...

    Morale : Lorsqu'on fait du debugg, surtout ne pas oublier de mettre ces P**** de variables sur ON :
    display_errors = On
    display_startup_errors = On

    Merci beaucoup pour votre aide et votre patience.
    Dans tout les cas ça remonte le moral de voir que certaines personnes
    tentent de vous aider.

    PS: niveau debug je suis plutot pas mauvais ( c'est pour les mauvaises langues ) par contre niveau apache je suis bidon.

    ++

    PS2 : Mon script est lui aussi fait pour m'afficher un bon paquet d'erreur (tout kom celui de LDDL), cependant sans les variables du php.ini à On, ca ne sert strictement à rien.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut Erreur enfin trouvée
    Bon aprés encore quelques recherches :
    L'erreur vient du mkdir():
    Warning: mkdir() [function.mkdir]: Permission denied in /var/www/vhosts/monsite.fr/httpdocs/controller/upload.php on line 45

    Warning: mkdir() [function.mkdir]: No such file or directory in /var/www/vhosts/monsite.fr/httpdocs/controller/upload.php on line 52

    Mon script ne veut pas me créer le fichier par cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mkdir($destination, 0777);
    Encore une fourberie de apache ou de linux j'imagine.

    Je suis actuellement en train de chercher une manière d'autoriser mon script a faire cette opération.

    Si vous avez une idée, n'hésitez pas je suis preneur. (Info supplémentaire : mon script php n'est pas dans le meme répertoire que la destination )

  12. #12
    FoxLeRenard
    Invité(e)
    Par défaut
    Je ne dis pas que je suis découragé, mais ... je ne sais pas si tu as lu les choses que je croyais simples

    1) tu crées avec ton FTP un répertoire a la main et fais un CHGMODE 777
    (aprés on le fera par PHP)

    2) tu test mes 2 PHP en y mettant le bon nom de repertoire
    3) tu me dis si ça copie bien

    Si tout est OK alors tes paramétres PHP et tout le reste c'est OK !!

    Si tout est OK on verra ligne par ligne comment repenser TON PHP !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut Final :
    Bon finalement, voilà ou se situait l'erreur :
    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mkdir($destination, 0777)
    ne fonctionne pas correctement sur mon serveur ( par contre ça j'ai pas trouvé pourquoi ), de ce fait apres chaque mkdir, je suis obligé de faire un chmod(..,777), sinon mon script n'a pas accès au fichier.

    Mon code était bon ! Le serveur lui par contre présente de sérieux problèmes.
    ( de nouveaux problèmes ont surgis, mais je les reserve pour un autre post )

    Finalement FoxLeRenard était dans le vrai ! => Problème de droits uniquement.

    Merci à vous.

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Upload] upload d'un fichier avec apostrophe
    Par SegmentationFault dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2006, 10h37
  2. [Upload] Upload de GROS fichiers en php
    Par osscour dans le forum Langage
    Réponses: 21
    Dernier message: 26/05/2006, 14h13
  3. [Upload] Upload d'un fichier excel sur un site web
    Par oldscrout dans le forum Langage
    Réponses: 3
    Dernier message: 31/03/2006, 10h09
  4. [Upload] Upload, renommer le fichier
    Par Alain15 dans le forum Langage
    Réponses: 15
    Dernier message: 14/02/2006, 14h06
  5. [Upload] Upload de gros fichiers
    Par Rémiz dans le forum Langage
    Réponses: 8
    Dernier message: 07/01/2006, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo