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 de fichier problématique [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut Upload de fichier problématique
    Bonjour à tous.

    Dans le développement d'un site, je souhaite pouvoir attribuer une image à un élément. Pour cela, je souhaite uploader l'image sur le serveur en question. Pour ce faire, je me suis basé sur la note rédigée par Antoine Hérault et disponible ici. Je l'ai ensuite adapté afin d'obtenir ceci :

    Code PHP : 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
    $dossier = './../img/affiche/';
    $fichier = basename($affiche['name']);
    $taille_maxi = 2048000;
    $taille = filesize($affiche['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.pdf');
    $extension = strrchr($affiche['name'], '.'); 
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) 
    {
        $msg='Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
        $erreur=1;
    }
    if($taille>$taille_maxi)
    {
        $msg= 'Le fichier est trop gros...';
        $erreur=1;
    }
    if($erreur!=1) //S'il n'y a pas d'erreur, on upload
    {
        //On formate le nom du fichier ici...
        $fichier = strtr($fichier, 
    		'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
    		'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
        echo "Affichage des valeurs obtenues:<br>";
        // echo "affiche['name']: ".$affihce['name']."<br>";
        echo "taille: $taille<br>";
        echo "dossier: $dossier<br>";
        echo "fichier: $fichier<br>";
        if(move_uploaded_file($_FILES['affiche']['tmp_name'], $dossier . $fichier)) 
        {
            echo 'Upload effectué avec succès !';
        }
        else //Sinon (la fonction renvoie FALSE).
        {
            echo 'Echec de l\'upload !';
        }
    }
    else
    {
        echo $msg;
    }

    Lorsque j'exécute le code, j'obtiens systématiquement le message "Echec de l'upload".

    Les valeurs que je récupère sont les suivant :

    Citation Envoyé par valeur obtenue
    Affichage des valeurs obtenues:
    tmp_name:
    taille: 492883
    dossier: ./../img/affiche/
    fichier: hivernales.png
    Echec de l'upload !
    Quelqu'un pourrait-il me dire où je dois regarder afin de trouver mon erreur ?
    Au niveau des droits, je les ai placé sur le dossier se trouvant sur le serveur à 755 comme conseillé au début du tuto.

    Pour information, la variable $affiche est obtenue comme ceci
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $affiche=(isset($_FILES['affiche'])) ? $_FILES['affiche']: Null;
    et donc le nom du champs dans le formulaire est 'affiche'.

    Pour toutes informations complémentaires nécessaire à la recherche de la cause du problème, veuillez me le signaler et je tâcherai de fournir l'information le plus rapidement possible.

    En vous remerciant pour l'aide et les astuces que vous pourrez me communiquer, je vous souhaite de passer une bonne journée.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    fais un pour voir un :
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_r($_FILES['affiche']);

  3. #3
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Alors, comme demandé, voici le résultat :

    Affichage des valeurs obtenues:
    taille: 492883
    dossier: ./../img/affiche/
    fichier: hivernales.png
    realpath: /var/www/xlagenda/img/affiche
    Array ( [name] => hivernales.png [type] => image/png [tmp_name] => /tmp/phpbZyIkG [error] => 0 [size] => 492883 )
    Echec de l'upload !
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo "Affichage des valeurs obtenues:<br>";
    // echo "affiche['name']: ".$affihce['name']."<br>";
    echo "taille: $taille<br>";
    echo "dossier: $dossier<br>";
    echo "fichier: $fichier<br>";
    echo "realpath: ".realpath($dossier);
    print_r($_FILES['affiche']);

    En espérant que ce soit plus clair...

    Au niveau du chemin, il est correct

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    ouai pas d'erreur au niveau de l'upload et le chemin est bon, maintenant fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(is_writable(realpath($dossier)));

  5. #5
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Bon, je viens de faire une série de test, et j'ai remarquer une chose étrange.
    Mais commençons par le résultat :
    Affichage des valeurs obtenues:
    affiche['name']: formulaire-remboursement-EFA.png
    taille: 74987
    dossier: ./../img/affiche/
    fichier: formulaire-remboursement-EFA.png
    realpath: /var/www/xlagenda/img/affiche
    Array ( [name] => formulaire-remboursement-EFA.png [type] => image/png [tmp_name] => /tmp/php3EANTU [error] => 0 [size] => 74987 )
    bool(true)
    Echec de l'upload !
    avec les droits : 775

    Lorsque je place les droits à 777, j'obtiens :

    Affichage des valeurs obtenues:
    affiche['name']: formulaire-remboursement-EFA.png
    taille: 74987
    dossier: ./../img/affiche/
    fichier: formulaire-remboursement-EFA.png
    realpath: /var/www/xlagenda/img/affiche
    Array ( [name] => formulaire-remboursement-EFA.png [type] => image/png [tmp_name] => /tmp/php3EANTU [error] => 0 [size] => 74987 )
    bool(true)
    Upload Réussi !
    Mais pour tout autre droit sur le répertoire en question bool(false) et "Echec de l'upload !"

    Je ne pense pas non plus que ce soit très sécurisant de laisser full accès pour un répertoire...

    Une idée?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    il faut ajouter l'utilisateur du serveur web dans le groupe de droit du dossier

  7. #7
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    OK,

    Je ferais cela lundi alors. Je ne suis plus au bureau (à 21h36, heureusement me direz vous ;-))

    (le forum était hors ligne une partie de l'après midi?)

    Il faudra que je vérifie avec les users alors...

    Merci pour les conseils, et pour les informations fournies.

    En vous souhaitant un bon week-end...

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

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  2. Upload de fichier par XMLHTTP
    Par Immobilis dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 17h02
  3. upload de fichier
    Par 120 dans le forum ASP
    Réponses: 16
    Dernier message: 21/06/2004, 12h07
  4. Upload de fichiers sur un ftp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 10
    Dernier message: 20/06/2004, 11h55
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    Réponses: 4
    Dernier message: 03/06/2004, 12h44

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