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 avec PHP - débutant


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 avec PHP - débutant
    Bonjour,

    Je suis en train d'essayer un petit bout de code en php pour faire un Upload. Source tiré de Developpez.com
    titre: Upload de fichiers en PHP
    Auteur :Antoine Hérault

    J'ai monté sur mon pc sous Windows XP le serveur : IIS (5.1)
    J'ai installé PHP en suivant les tutoriels.
    Le Upload ne fonctionne pas, il ne copie rien...et je ne vois rien non plus dans le répertoire temporaire définit dans php.ini

    voici les codes sources :
    HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form method="POST" action="upload.php" enctype="multipart/form-data">
        <!-- on limite le fichier a 1 Mo -->
        <input type="hidden" name="MAX_FILE_SIZE" value = "1000000">
        Fichier : <input type="file" name="avatar">
        <input type="submit" name="envoyer" value="Envoyer le fichier">
    </form>
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php
    $dossier = 'upload/';
    $fichier = basename($_FILES['avatar']['name']);
    $taille_maxi = 1000000;
    $taille = filesize($_FILES['avatar']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['avatar']['name'], '.');
     
    if( !is_uploaded_file($tmp_file) )
        {
            echo 'Voici l erreur =  @@@';
            echo $_FILES['avatar']['error'];
            echo ' @@@                  ';
            exit("Le fichier est introuvable");
        }
     
     
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
    }
    if($taille>$taille_maxi)
    {
         $erreur = 'Le fichier est trop gros...';
    }
    if(!isset($erreur)) //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 '(2) Voici le nom du fichier : ';
         echo $_FILES['avatar']['tmp_name'];
         echo '  à transferer dans : ';
         echo $dossier . $fichier ;
         echo '  ';
     
         // J'ai mis le move_upload en commentaire pour voir la trace du fichier dans les temporaires.
         //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 !';
         //}
    }
    else
    {
         echo $erreur;
    }
    ?>
    Quelqu'un a t il une idée, pourquoi le fichier uploader n'arrive pas dans les temporaires ?
    Note : J'ai analysé avec Wireshark le fichier est bien uploader...mais apparement pour rien...Evidement, j'ai recherché mon fichier sur tout le disque....mais rien aucune trace....

    Merci de votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Sans le move_upload_file(), ton fichier n'acquiert pas de nom définitif et garde un nom temporaire sans signification (que tu ne trouvera donc pas lors d'une recherche)...

    Tu dois le laisser pour effectuer tes tests.

    Par ailleur, pour des raisons de lisibilité, place ton extrait de code entre les balises CODE.

  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
    J'ai remis mais de toute façon, il ne trouve toujours pas le fichier dans le répertoire des fichiers temporaire. Je pense qu'il y a peut être un problème de droit...mais où ? Faut il monter un serveur FTP aussi?

  4. #4
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    non il ne faut pas de FTP.

    Que dis ton script quand tu l'exécute ? Il dit que le fichier est envoyé ou que tu as une erreur ?

    Le fichier est censé arrivé dans ton repertoire /upload, et non dans ton repertoire temporaire.
    Si t'es sur linux, tu dois évidemment t'assurer que ton répertoire de destination a bien des droits d'ecriture pour Apache. Tu devrais peut être aussi indiquer le chemin de ton dossier d'upload en chemin absolu, pour éviter les problèmes.

  5. #5
    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 suis sous Xp et j'utilise IIS.

    Il affiche "Voici l erreur = @@@0 @@@ Le fichier est introuvable"

    le code erreur est entre les @@@ ==> soit 0 - pas d'erreur sur le fichier
    Et il affiche Le fichier est introuvable...donc il ne trouve pas tmp_file, et si j'affiche le chemin de tmp_file il met : c:\windows\temp
    Dans IIS j'ai mis des droits d'écriture sur le répertoire upload.

    D'après ce que j'ai compris, il place d'abord le fichier dans le répertoire temporaire, puis il le copie dans le répertoire final.

  6. #6
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Heuuu il sort d'où ce $tmp_file ???

    je le voit initialisé nul part...

    D'apres la doc PHP : Pour un fonctionnement correct, la fonction is_uploaded_file() nécessite un argument comme $_FILES['userfile']['tmp_name']

    Bref, c'est normal que ça ne marche pas...

  7. #7
    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
    oui effectivement quand je disais file_tmp je voulais dire : $_FILES['userfile']['tmp_name']

  8. #8
    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
    heu oui tu as raison j'ai ajouté :
    $tmp_file = $_FILES['avatar']['tmp_name'];

    et oh miracle ça fonctionne !!

  9. #9
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Attention : Vérifier l'extension du fichier ne suffit pas pour sécuriser l'upload.
    Il faut vérifier le type mime : http://fr3.php.net/manual/fr/functio...ntent-type.php

  10. #10
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573

Discussions similaires

  1. Renomer une image apres upload avec PHP
    Par sooprano dans le forum Langage
    Réponses: 7
    Dernier message: 21/05/2011, 13h51
  2. [Upload] Upload d'image avec PHP !
    Par King_T dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2008, 02h21
  3. [Upload] formulaire php avec upload de fichier
    Par achos dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2007, 14h14
  4. [Upload] Vidéo en demande avec php
    Par batrook dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2006, 17h29
  5. [débutant] choix de postgre avec php / migration
    Par bilbon.S dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/03/2004, 14h05

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