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 impossible via un formulaire


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
    Février 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 43
    Par défaut upload impossible via un formulaire
    Bonjour

    Je tourne en rond depuis hier sur un problème surement stupide, mais qui m'échappe complètement.
    J'essaie d'uploader un fichier via un formulaire, mais ça ne fonctionne pas.

    J'ai utilisé le tutoriel de Antoine Hérault du site développer.com (http://antoine-herault.developpez.co...ls/php/upload/) en le suivant à la lettre.

    J'ai bien enctype="multipart/form-data" dans ma balise form
    Je vérifie que le dossier est bien "écrivaille" avec is_writable qui est true, de toute façon, je l'ai passé en 777.
    Je vérifie aussi l'existence du dossier avec is_dir au cas je le verrais, mais ou ce serait une illusion !. Il existe.

    Je demande d'afficher les erreurs avec $_FILES['fichier']['error'] et je reçois 0 ce qui, d'après ce que j'ai compris, signifie que tout est OK.

    Comme cela ne fonctionnait toujours pas, j'ai regardé du côté de php.ini.
    J'ai vérifié que file_uploads = On, ce qui était le cas, et comme upload_tmp_dir était commenté, je lui ai attribué une valeur = /var/tmp/upload/ après avoir créé le dossier et l'avoir mis en 777. Le site est hébergé dans le dossier /var/www/mondossier/.

    Du coup, je ne sais plus quoi chercher pour régler le problème. Qu'est-ce que je n'ai pas vérifié. J'ai fait mes tests avec de petits fichiers .txt ou .pdf et j'ai mis une valeur de 20M dans la taille max du php.ini.

    Si quelqu'un a une idée… Merci d'avance.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Déjà, "ça ne fonctionne pas", c'est assez flou comme problème, vu qu'on ne sait pas ce que tu fais de ton fichier une fois uploadé. Tu tentes de l'enregistrer sur le serveur et il ne s’enregistre pas ? Tu tentes de lire et il est vide ?

    Ensuite, nous donner un peu de code pourrait nous aider à t'aider, par exemple le code du formulaire et celui su script qui gère la récupération du fichier.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 43
    Par défaut
    Pardon de ce manque de précision.
    J'essai de le déposer dans un dossier (qui existe et qui est 777), mais il ne se dépose pas… le dossier reste vide.

    Est-ce que pour que la fonction move_uploaded_file fonctionne, il faut installer une "librairie" comme il faut le faire avec la librairie GD pour faire des vignettes ?

    Merci pour ton intérêt.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    A priori, non, move_​uploaded_​file est une fonction native de PHP.
    Peut-on voir le code qui traite l'upload ? (vu ta description, ça doit être une bêtise du genre de celles qu'on ne voit plus quand il s'agit de son propre code)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 43
    Par défaut
    Donc voila le 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
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    $dossier = '../upload/test/';// le fichier qui fait l'upload est dans un dossier à la racine et le dossier upload est à la racine
    // les dossier upload et test sont en 777
     
    if(is_dir($dossier)){
       echo "Le dossier existe<br />";// indique que le dossier existe
    }
    else{
       echo "Le dossier n'existe pas<br />";
    }
    if (is_writable($dossier)) {
        echo 'Le fichier est accessible en écriture.<br />'; // indique que le dossier est accessible en écriture
    }
    else {
        echo 'Le fichier n\'est pas accessible en écriture !<br />';
    }
     
    echo "<p>vardump</p><pre>";
    var_dump($_FILES); // -> donne 0
    echo "</pre><p>fin vardump suivi du print r</p>";
     
    $fichier = basename($_FILES['fichier']['name']);
    $taille_maxi = 100000;
    //$taille_maxi = 500000;
    $taille = filesize($_FILES['fichier']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.txt', '.pdf');
    //$extensions = array('.png', '.gif', '.jpg', '.jpeg', '.txt', '.doc', '.docx', '.xls', '.xlsx', '.odt', '.rtf', '.csv', '.pdf');
    $extension = strrchr($_FILES['fichier']['name'], '.'); 
    //Début des vérifications de sécurité...
    //Si l'extension n'est pas dans le tableau
    if(!in_array($extension, $extensions)) { 
    	$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...'; // ai fait des tests avec des extention qui ne sont pas dans la liste -> renvoi le message d'echec, sinon non
    	echo '<p>Echec de l\'upload ! PAS LA BONNE EXTENSION</p>';
    }
    if($taille>$taille_maxi){
         $erreur = 'Le fichier est trop gros...'; // idem pour les test de taille en mettant $taille_maxi très faible
         echo '<p>Echec de l\'upload ! PAS LE BON POIDS</p>';
    }
     //S'il n'y a pas d'erreur, on upload
    if(!isset($erreur)){
    	 $fichier=normalisation($fichier);// fonction qui supprime les accents, espace... et qui fonctionne (je la mets en dessous)
    	 // J'ai aussi fait un test sans l'utiliser et c'est pareil
    	//Si la fonction renvoie TRUE, c'est que ça a fonctionné...
        if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier)) {
        	echo '<p>Upload effectué avec succès !</p>';
         }
    	//Sinon (la fonction renvoie FALSE).
        else {
        	echo '<p>Echec de l\'upload !</p>';
    		echo $_FILES['fichier']['error']."<br />";
    		echo "<p>TEST / ".$_FILES['fichier']['error']['UPLOAD_ERR_INI_SIZE']."</p>";
         }
    }
    else{
         echo $erreur;
    }
     
    // --------------------------------
     
    function normalisation($nompage) {  
    	$accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
    	$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
    	$nompage = strtr($nompage,$accents,$ssaccents);
    	$in = array(' ', '?', '!', ',', ':', "'", '&', '(', ')');
    	$out = array('-', '', '', '', '', '', '-', 'et', '', '');
       	$nompage = str_replace($in, $out, $nompage);
    	echo "<p> ---------- > Normalisation : nom du fichier = ".$nompage."</p>";
       	return $nompage;
    }
    Et ce que la page affiche fonction des "écho" que j'ai mis

    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
     
    If isset fichier
    Traitement de l'UPLOAD : tmp_name = /tmp/phpFEyPge
    Le fichier existe.
    Le dossier existe
    Le fichier est accessible en écriture.
    vardump
    array(1) {
      ["fichier"]=>
      array(5) {
        ["name"]=>
        string(16) "Sans titreml.txt"
        ["type"]=>
        string(10) "text/plain"
        ["tmp_name"]=>
        string(14) "/tmp/phpFEyPge"
        ["error"]=>
        int(0)
        ["size"]=>
        int(2804)
      }
    }
    fin vardump suivi du print r
    0
    fin du print
    Echec de l'upload !
    0
    Si c'est bien une erreur stupide je me pile !
    Merci pour ton aide

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je crois que tu as oublié le nom du fichier de destination :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $fichier=normalisation($fichier);// fonction qui supprime les accents, espace... et qui fonctionne (je la mets en dessous)
    if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier)) {
    devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $fichier=normalisation($fichier);// fonction qui supprime les accents, espace... et qui fonctionne (je la mets en dessous)
    if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier.$fichier)) {
    non ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. [PHP 5.0] Upload de fichier via un formulaire ayant plusieurs fieldsets
    Par nina.b dans le forum Langage
    Réponses: 8
    Dernier message: 11/09/2009, 13h10
  2. Erreur upload fichier via formulaire
    Par Telecaster dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2009, 12h30
  3. Réponses: 4
    Dernier message: 22/02/2008, 13h43
  4. Réponses: 4
    Dernier message: 29/11/2007, 14h09
  5. [Web] Upload fichier via formulaire HTTP
    Par nik00s dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/08/2005, 13h27

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