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 d'une image


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut upload d'une image
    Bonjour j'essaye d'uploader une image et je n'y arrive pas, je suis en local sous wamp, j'ai le message "erreur d'upload", je ne vois pas d'ou ca vient, peut etre le chemin pour placé l'image mais j ai essayé de mettre un chemin relatif ou absolue et cela ne change rien, si quelqu un peut m'aider;

    mon chemin pour aller jusqu' a la page de formulaire:

    C:\wamp\www\monSite\site\formulaire.php

    pour y acceder :

    www.site.com/formulaire.php

    Formulaire
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="post" action=""  enctype="multipart/form-data">
    <label for="image1">Image 1 :</label>
    <input type="file" name="image_1" id="image1" />
    <input type="submit" name="Ajouter" value="Ajouter" />   
    </form>

    Traitement (sur la mm page)
    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
    if((isset($_FILES['image_1']))&&($_FILES['image_1']['error']==0)){ // Il y a l'image et pas d'erreur.
      if($_FILES['image_1']['size']<=125000){ // Si l'image n'est pas trop gros.
        // Testons si l'extension est autorisée
        $infosfichier= pathinfo($_FILES['image_1']['name']);
        $extension_upload=$infosfichier['extension'];
        $extensions_autorisees= array('jpg', 'jpeg');
     
        if(in_array($extension_upload,$extensions_autorisees)){
          // On peut valider l'image et la stocker définitivement                                              
          $transfert = move_uploaded_file($_FILES['image_1']['tmp_name'], 'uploads/'. basename($_FILES['image_1']['name']));
          if(!$transfert) {trigger_error("erreur d'upload"); $err='Erreur move_upload_file( )';}
     
     
        }else{ // Probleme l'extension n'est pas la bonne.
        $err='Probleme l\'extension de l\'image  n\'est pas la bonne.';
        }  
      }else{ // Probleme l'image est trop grosse.
       $err='L\'image  est trop grosse.';
      }
    }
    echo $err;
    Quand je fais un "print_r($_FILES);"

    Array
    (
        [image_1] => Array
            (
                [name] => bloublou.jpg
                [type] => image/jpeg
                [tmp_name] => C:\wamp\tmp\php10B8.tmp
                [error] => 0
                [size] => 75568
            )
    
    )
    Une petite idée ?

    J'ai testé le cote ci dessous, le fichier ce crée bien, mais tjrs la même erreur, l'image ne de deplace pas, dans la configuration de php sur wamp, "file uploads" est bien coché..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mkdir('fichier/stock/', 0777, true);
    $transfert = move_uploaded_file($_FILES['image_1']['tmp_name'], 'fichier/stock/'. basename($_FILES['image_1']['name']));
    J'ai testé un autre code que j'ai vu ailleur et la ca bloque a "if(is_uploaded_file($_FILES['image_1']['tmp_name']))" donc j ai le message 'Problème : Attaque possible par le fichier ';
    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
    if((isset($_FILES['image_1']))&&($_FILES['image_1']['error']==0)){ // Il y a l'image et pas d'erreur.
      if($_FILES['image_1']['size']<=125000){ // Si l'image n'est pas trop gros.
        // Testons si l'extension est autorisée
        $infosfichier= pathinfo($_FILES['image_1']['name']);
        $extension_upload=$infosfichier['extension'];
        $extensions_autorisees= array('jpg', 'jpeg');
        if(in_array($extension_upload,$extensions_autorisees)){
          // On peut valider l'image et la stocker définitivement
          if(is_uploaded_file($_FILES['image_1']['tmp_name']))
          {
            if (!move_uploaded_file($_FILES['image_1']['tmp_name'], '/m1/m2/'. basename($_FILES['image_1']['name'])))
            {
               $err='Problème : Impossible de déplacer le fichier dans son répertoire de destination';
            }
          }
          else
          {
            $err='Problème : Attaque possible par le fichier ';
          }                                                                            
       }else{ // Probleme l'extension n'est pas la bonne.
         $err='Probleme l\'extension de l\'image  n\'est pas la bonne.';
       }   
     }else{ // Probleme l'image est trop grosse.
      $err='L\'image  est trop grosse.';
     }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Affiche bien toutes les erreurs PHP : La fonction move_uploaded_file() produit des messages d'erreur donc tu devrais les voir.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    non justement c est bien le probleme, aucune erreur mais pourtant l'image n'est pas deplacer la ou je le voudrais

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Affiche bien toutes les erreurs PHP.

    Concretement tu dois avoir un problème soit sur le chemin soit sur les droits.

    'uploads/' c'est un repertoire 'uploads' au même niveau que le script mais '/m1' c'est un repertoire 'm1' à la racine de la machine.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Et au passage tu n'as pas besoin de faire "is_uploaded_file()" car cette fonction :
    Citation Envoyé par php
    Retourne TRUE si le fichier filename a été téléchargé par HTTP POST...
    Or la fonction "move_uploaded_file()" que tu utilise juste après pour déplacer ton fichier :
    Citation Envoyé par php
    S'assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu'à destination.
    C'est donc redondant, l'emploi de "is_uploaded_file()" ne sert à rien ici...

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Affiche bien toutes les erreurs PHP.
    ? comment faire, j'ai aucune erreur sur la page, aucune erreur quand j'affiche le code source.

    Concretement tu dois avoir un problème soit sur le chemin soit sur les droits.
    Il n' a pas de CHMOD sur windows, les droits au niveau de wamp ? j'ai vu qu'il y avait "file uploads" dans la configuration de php et celui ci est déja coché, je ne sais pas si il y a d'autre chose à verifier sachant que j'ai pu lire que l'upload fonctionnait par defaut sans avoir à modifier quoi que ce soit... je n'ai rien bidouiller sur wamp, juste crée un virtualhost pour acceder à mes pages différemment, le non fonctionnement de l'upload pourrait venir de la ?

    'uploads/' c'est un repertoire 'uploads' au même niveau que le script mais '/m1' c'est un repertoire 'm1' à la racine de la machine.
    Je suis bien d'accord, j'ai bien le dossier au même niveau:
    C:\wamp\www\monSite\site\formulaire.php
    C:\wamp\www\monSite\site\uploads

    Se qui est bisare c'est quand je crée le dossier juste avant de deplacer l'image dans ce dernier, le dossier se crée bien mais ca s'arrete la.. l'image ne va pas du dossier temporaire au dossier venant de se créer !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mkdir('fichier/stock/', 0777, true);
    $transfert = move_uploaded_file($_FILES['image_1']['tmp_name'], 'fichier/stock/'. basename($_FILES['image_1']['name']));
    Le faite que je suis en local et que je n'accede pas à mes dossier via "http://localhost/monSite/site/index.php" ou "http://127.0.0.1/monSite/site/index.php" mais par www.site.com en virtualhost change t-il quelque chose au niveau des droits ?

    Fichier C:\WINDOWS\system32\drivers\etc\hosts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    127.0.0.1       localhost
    127.0.0.1       www.site.com
    Fichier C:\wamp\bin\apache\Apache2.4.4\conf\extra\httpd-vhosts.conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <VirtualHost *:80>
        DocumentRoot "C:/wamp/www/"
        ServerName localhost
    </VirtualHost>
     
    <VirtualHost *:80>
        DocumentRoot "C:/wamp/www/monSite/site/"
        ServerAdmin webmaster@site.com
        ServerName www.site.com
        ServerAlias site.com
    </VirtualHost>
    Et au passage tu n'as pas besoin de faire "is_uploaded_file()" car cette fonction :
    Citation Envoyé par php
    Retourne TRUE si le fichier filename a été téléchargé par HTTP POST...
    Or la fonction "move_uploaded_file()" que tu utilise juste après pour déplacer ton fichier :
    Citation Envoyé par php
    S'assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu'à destination.
    C'est donc redondant, l'emploi de "is_uploaded_file()" ne sert à rien ici...
    D'accord, en faite vu que mon code ne marche pas, j'essaye d'aller voir à droite et à gauche pour essayer de cerner le problème en essayant des codes différents..

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n' a pas de CHMOD sur windows mais il y a des droits NTFS

    Si tu écrit le chemin entier (C:\wamp\www\monSite\site\uploads) est-ce que cela fonctionne ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Non comme stipulé dans mon 1er message j'ai essayé chemin relatif et absolue... sans le moindre changement ni même un message d'erreur.

    Je ne sais plus si c était des slash ou anti slash donc j'ai testé les deux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    move_uploaded_file($_FILES['image_1']['tmp_name'], 'C:/wamp/www/monSite/site/uploads/'. basename($_FILES['image_1']['name']));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    move_uploaded_file($_FILES['image_1']['tmp_name'], 'C:\wamp\www\monSite\site\uploads\test.jpg');

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ajoute au début de ton script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting(E_ALL);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Oh mon Dieu !
    Tout en haut de ma page j'avais ce code ci, comme sur toutes mes pages, ca m'évitait d'avoir des probèmes du genre quand je valide un formulaire sur une "page 1" et que je la traite sur la mm page quand j'allais sur une "page 2" pour revenir ensuite sur la "page 1", ca m'affichait une erreur sur la page 1 ! quand je vire ce bout de code ca fonctionne bien l'image est bien uploader au bonne endroit pourtant jrecuperai aussi la superglobale $FILE: $_SESSION['sauvegardeFILES']=$_FILES;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(!empty($_POST) OR !empty($_FILES)){
        $_SESSION['sauvegarde']=$_POST ;$_SESSION['sauvegardeFILES']=$_FILES;$fichierActuel=$_SERVER['REQUEST_URI']; // $_SERVER['PHP_SELF'] renvoie le "fichier courant" utilisé (par exemple page.php).  
    	//Probleme avec la réecriture/ $_SERVER['QUERY_STRING'] renvoie toutes les informations qui sont dans l'URL, autre que le nom du fichier (par exemple, si je suis sur index.php?page=3, cette variable contiendra page=3).
    	/*if(!empty($_SERVER['QUERY_STRING'])){$fichierActuel .= '?' . $_SERVER['QUERY_STRING'] ;}*/  
        header('Location: ' . $fichierActuel);exit();
    }
    if(isset($_SESSION['sauvegarde'])){$_POST=$_SESSION['sauvegarde'];$_FILES=$_SESSION['sauvegardeFILES'];unset($_SESSION['sauvegarde'], $_SESSION['sauvegardeFILES']);}
    Merci de m'avoir aider

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Nan on peut pas stocker un fichier dans une variable de session.

    Tu traite un pb ponctuel avec une réponse qui impacte tes scripts d'une manière "générale". Il faut résoudre les pb en fonction des besoins et pas plus.

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

Discussions similaires

  1. [Upload] upload d'une image
    Par emna_icn dans le forum Langage
    Réponses: 11
    Dernier message: 04/05/2006, 23h14
  2. [Upload] Upload d'une image
    Par Seth77 dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2006, 11h00
  3. [Image]upload d'une image
    Par leloup84 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/03/2006, 15h29
  4. [Upload] envoyer une image
    Par carter15_2001 dans le forum Langage
    Réponses: 22
    Dernier message: 20/01/2006, 18h52
  5. [Upload] Renommer une image uploadée
    Par Empty_body dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2006, 06h51

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