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 :

PHP => move_uploaded_file


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut PHP => move_uploaded_file
    Bonjour tout le monde,

    Je viens poster ici ce soir car je butte sur la fonction php "move_uploaded_file ".

    - En effet, je n'ai aucun message d'erreur mais l'upload ne se fait pas....

    Voici mon code:

    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
     
    <?php
     
    $file = $_FILES['image1'];
     
    $uploaddir = '/setup/';
    $uploadfile = $uploaddir . basename($_FILES['image1']['name']);
     
     
    echo '<pre>';
    if (move_uploaded_file . basename($_FILES['image1']["name"], $uploadfile)) {
      echo "Fonctionne ok .
       Voici plus d'informations :\n";
    } else {
      echo "Ne fonctionne pas.
          Voici plus d'informations :\n";
    }
     
    print_r($_FILES);
     
    echo '</pre>';
    echo "le nom du fichier selectionné est : ".basename($_FILES['image1']["name"]);?>
    </br>
    <?php
    echo " le nouveau chemin de destination est : ".$uploadfile;
    ?>
    Je ne vous ai pas mis le formulaire html...

    - Mes écho fonctionnent bien,
    - La page PHP m'affiche "Fonctionne ok"
    - Je n'ai pour le moment pas fait de contrôle sur le type de fichier ni sur la taille etc... je voudrais déjà faire fonctionner cela simplement et petit a petit corser les choses

    Je precise que mon serveur PHP est sur un Synology et que l'utilisateur http a bien les droits en écriture.
    J'ai aussi fait un chmod 777 sur le dossier /setup ...

    Je ne demande pas une solution toute faite mais plutôt quelques conseils sur cette fonction...

    Merci a vous

  2. #2
    Invité
    Invité(e)
    Par défaut


    • Tu fais une concaténation au lieu d'une fonction !
    • Tu confonds "name" et "tmp_name"
    • enlève basename()


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( move_uploaded_file( ... ) ) {
    Dernière modification par Invité ; 30/08/2019 à 09h55.

  3. #3
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Bonjour et merci pour ta réponse.

    J'ai testé avec ta ligne de code mais je passe dans le else..

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    tu ne testes pas l'existence du fichier (comme indiqué ici : https://antoine-herault.developpez.c...ls/php/upload/). Or j'ai quelques doutes sur ta ligne 6 $uploaddir = '/setup/';. Y a pas un slash en trop ? $uploaddir = 'setup/';Sinon, garde bien la remarque de jreaux62 au post #2...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il faut surtout :


    * Code d'upload de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    if(isset($_FILES['avatar']))
    { 
         $dossier = 'upload/';
         $fichier = basename($_FILES['avatar']['name']);
         if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }

  6. #6
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Bonjour tout le monde,

    Merci pour vos réponses ;-)

    Je vais essayer de vous répondre sans m'emmener les pinceaux ^^

    - laurentSc => j'ai mis /setup/ car le dossier setup est a la racine de mon dossier web et mon script php ne l'est pas.. c'est pour éviter d'écrire ../../../setup/

    Non je ne teste pas l'existence du fichier..je voudrais déjà comprendre et faire fonctionner le "noyau" pour ensuite l'étoffer avec toutes les options.. test existence, type, taille etc..

    - jreaux62 => j'ai remarqué pour la concaténation..c'est vrai qu'a force de tout tester ...

    Je confond peux être name et tmp_name enfin je ne pense pas avoir compris tmp_name car pour moi

    name = c'est le nom du fichier uploadé
    tmp_name = c'est le chemin d'accès a ce fichier dans le dossier temporaire du serveur php ce qui revient au meme que basename nan?

    Si tel est le cas, je ne comprend pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier))
    on va faire le move sur le fichier associé a la requête "POST" qui a pour nom avatar et qui se trouve temporairement dans "tmp_name" ?

    Donc on ne se sert pas du nom du fichier "$_FILES['avatar']['name']" mise a par pour le renommer a l'identique dans le dossier de destination?

    Merci pour le temps que vous me consacrez

  7. #7
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    J'ai copié/collé le code upload de base en ne modifiant que le nom de la requête "POST" ainsi que le chemin de destination.

    J'ai testé avec "/setup/" et setup/ ... ^^

    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
     
     
    <?php
     
    echo '<pre>';
    if(isset($_FILES['image1']))
    { 
         $dossier = '/setup/';
         $fichier = basename($_FILES['image1']['name']);
         if(move_uploaded_file($_FILES['image1']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
     
    print_r($_FILES);
     
    echo '</pre>';
    echo "le nom du fichier selectionné est : ".basename($_FILES['image1']["name"]);?>
    </br>
    <?php
    echo " le nouveau dossier de destination est : ".$dossier;
    ?>
    Voici mon retour :

    Nom : php.jpg
Affichages : 327
Taille : 31,0 Ko

    Voici le formulaire html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form action="upload.php" method="post" enctype="multipart/form-data">
        Select image to upload:
        <input type="file" name="image1">
        <input type="submit" value="Upload Image" name="submit">
    </form>

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Je sais pas si c'est important, mais dans ton formulaire, il manque une ligne <input type="hidden" name="MAX_FILE_SIZE" value="2000000">

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par none61 Voir le message
    ...c'est pour éviter d'écrire ../../../setup/
    • As-tu testé avec '../../../setup/' ??
    • As-tu vérifié que le dossier a bien les droits en écriture (CHMOD) ?

    on va faire le move sur le fichier associé a la requête "POST" qui a pour nom avatar et qui se trouve temporairement dans "tmp_name" ?
    Donc on ne se sert pas du nom du fichier "$_FILES['avatar']['name']" mise a par pour le renommer a l'identique dans le dossier de destination?
    Tout-à-fait.

    On peut néanmoins tester l'extension du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_Extension = strtolower(pathinfo($_FILES['image1']['name'],PATHINFO_EXTENSION));
    et son type MIME RÉEL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // Retourne le type mime
    $file_MimeType = finfo_file($finfo, $_FILES['image1']['tmp_name']);
    finfo_close($finfo);
    Voir : Système de Gestion-Affichage de Nouvelles - Traitement Photo

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Voici un code qui fonctionne (testé ; tu peux t'en inspirer).

    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
    <!DOCTYPE>
    <html lang="fr">
    <head>
    	<title>upload</title>
    	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
     
    </head>
    <body>
     
    <form method="POST" action="" enctype="multipart/form-data">
         <!-- On limite le fichier à 150Ko -->
         <input type="hidden" name="MAX_FILE_SIZE" value="150000">
         Fichier : <input type="file" name="avatar">
         <input type="submit" name="envoyer" value="Envoyer le fichier">
    </form>
    <?php
    if (isset($_POST['envoyer'])) {	
     
        if(isset($_FILES['avatar']))
        { 
            $dossier = 'upload/';
            $fichier = basename($_FILES['avatar']['name']);
            if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
            {
                echo 'Upload effectué avec succès !';
            }
            else //Sinon (la fonction renvoie FALSE).
            {
                echo 'Echec de l\'upload !';
            }
        }
    }
    ?>
     
    </body>
    </html>
    arborescence :
    upload.php
    <dossier upload>

  11. #11
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    ça fonctionne...enfin !!!

    Donc: tout mes dossiers étés déjà en CHMOD 777.. j'ai été obligé de mettre /volume1/web en CHMOD 777.... c'est un peu nul que php n'ai pas le droit d'écrire par défaut à la racine de /web...

    De plus en effet "/setup/" ne fonctionne pas... je suis obligé de faire "../../../setup" (c'est pas grave faut juste le savoir ^^)

    Maintenant je vais voir pour affiner les droits d'écriture car 777 c'est en full pour tout le monde donc...pas sécur

    laurentSc =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(isset($_FILES['avatar']))
    sert à contrôler l'existence du fichier lié à la requête "POST" avatar?

    Mais a quoi sert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (isset($_POST['envoyer']))
    ?

    Sinon je pensais à ça...il n'existe pas un fichier de "log" pour aider à débugger ce genre de problème? car si j'avais vu droit d'accès refuser ou un truc du genre ça m'aurai bien aidé

    Encore merci à vous, vous m'avais bien aidé !!!!

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(isset($_FILES['avatar']))
    sert à contrôler l'existence du fichier lié à la requête "POST" avatar?

    oui, ça sert à vérifier que l'utilisateur a bien sélectionné un fichier à uploader.

    Mais a quoi sert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (isset($_POST['envoyer']))
    ?
    Dans mon code le traitement en PHP est dans le même fichier que le formulaire, mais le traitement ne doit être exécuté que si le formulaire a été rempli, et si et seulement si c'est le cas, cette variable existe.

  13. #13
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    laurentSc Merci pour cette info ça me parait tellement évident maintenant que tu me l'a expliqué !!

    C'est vrai qu'en règle générale, je faisais 2 pages pour les formulaires.ça m'embêtais que le script "tourne" pour rien a la première ouverture..

    Je vais essayer ça ;-)

    Encore merci !

  14. #14

  15. #15
    Membre à l'essai
    Homme Profil pro
    apprenti ;-)
    Inscrit en
    Octobre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : apprenti ;-)

    Informations forums :
    Inscription : Octobre 2016
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    jreaux62 Merci pour le lien ;-)

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

Discussions similaires

  1. [PHP] move_uploaded_file() le fichier n'est pas transmis
    Par Alex101283 dans le forum Langage
    Réponses: 1
    Dernier message: 12/07/2019, 15h14
  2. PHP Warning: move_uploaded_file()
    Par solo190 dans le forum Apache
    Réponses: 1
    Dernier message: 01/11/2017, 09h13
  3. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  4. PHP Warning: move_uploaded_file
    Par Benamour Jr dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2010, 21h17

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