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 :

Problème d'upload de fichier


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut Problème d'upload de fichier
    j'essaie d'ajouter une fonction pour que les utilisateurs n'ayant pas un fichier sur leurs propre site puissent l'uploader sur le ftp (principalement pdf et doc).
    J'ai le code ci-dessous mais quand j'essaie j'ai l'erreur de l'extension avec n'importe quel fichier.

    upload.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="POST" action="upload_file.php" enctype="multipart/form-data">	
    <input type="file" name="file">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000"><input type="submit" name="envoyer" value="Envoyer le fichier">
     
    </form>
    upload_file.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
    <?php
    $dossier = 'upload/';
    $fichier = basename($_FILES['file']['name']);
    $taille_maxi = 2000000;
    $taille = filesize($_FILES['file']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.doc', '.docx', '.pdf', '.txt');
    $extension = strrchr($_FILES['avatar']['name'], '.'); 
    //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 pdf, doc, docx, png, gif, jpg, jpeg ou txt.';
    }
    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);
         if(move_uploaded_file($_FILES['file']['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;
    }
    ?>
    d'où vient cette erreur ?

    merci d'avance ! :-)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $extension = strrchr($_FILES['avatar']['name'], '.');
    sa serai pas plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $extension = strrchr($_FILES['file']['name'], '.');
    ??

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    ah oui merci ! cela fonctionne avec les pdf et doc maintenant mais pas avec les .jpg..

    et si je veux récupérer l'adresse du fichier uploadé pour en faire un lien (en l'enregistrant dans la table) comment puis-je faire ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    Concernant le .jpg cela devrait marcher :s
    et pour le chemin je ne suis pas sur ... mais je pense que c'est quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SERVER["HTTP_HOST"]."le chemin de ton projet"./upload/.'$fichier';
    j'en suis vraiment pas sur ....

    Il faut vérifier je pense aussi les droits sur le dossier ( le chmod )

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    Cela fonctionne pas mais j'ai fait la chose comme telle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              echo 'Upload effectué avec succès !';
    		  echo '<br><br>Voici le lien du fichier:<br><br>';
    		  echo '<b>http://www.swiss-target.ch/upload/',$fichier,'</b>';
    		  echo '<br><br>Copier-coller le dans le formulaire.';
    pour les permissions j'ai mis 777 sur le dossier.

    je remarque que lorsque le fichier est déjà uploadé il n'est pas écrasé lorsqu'il est chargé à nouveau.. quid ?

    Autre question, quel est le meilleur moyen pour les supprimer ? le faire manuellement après un certain temps ou c'est possible de mettre un code pour que l'utilisateur puisse le supprimer ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    je pense qu'il y a une erreur a ce niveau là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo '<b>http://www.swiss-target.ch/upload/',$fichier,'</b>';
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<b>http://www.swiss-target.ch/upload/'.$fichier.'</b>'
    c'est des points a la place des virgules .
    Apres pour le remplacement de fichier tu peux toujours tester si le fichier existe , si c'est le cas tu le supprime et le remplace ( il y peut être une fonction php qui fait sa ) .

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    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 420
    Par défaut
    Citation Envoyé par marycandy Voir le message
    je remarque que lorsque le fichier est déjà uploadé il n'est pas écrasé lorsqu'il est chargé à nouveau.. quid ?
    Quand tu fais des essais successifs, pas impossible que le navigateur ait gardé l'ancien fichier dans son cache. Vide le cache du navigateur avant de refaire un nouvel essai.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    j'ai essayé mais non, il n'écrase pas le premier fichier..

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    j'ai rien dis.. en actualisant le FTP c'est modifié.

    Je cherche maintenant comment creer un dossier pour chaque utilisateur, je pense que ce sera plus clair.

    Pour supprimer, c'est juste pour ne pas remplir mon FTP de documents qui deviennent inutiles après le temps. Serait-ce possible d'avoir un autodelete après une date passée ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    Voilà le code utilisé pour créer le dossier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     // Structure de répertoire désirée
    $structure = './upload/'.$societeID.'/';
     
    // Pour créer une stucture imbriquée, le paramètre $recursive 
    // doit être spécifié.
     
    if (!mkdir($structure, 0777, true)) {
        die('Echec lors de la création des répertoires...');
    Il fonctionne mais j'ai du rajouter un if pour qu'il ne créé le dossier que s'il n'existe pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (system.IO.directory.exists('./upload/'.$societeID.'/')){
    }
    else {
     // Structure de répertoire désirée
    $structure = './upload/'.$societeID.'/';
     
    // Pour créer une stucture imbriquée, le paramètre $recursive 
    // doit être spécifié.
     
    if (!mkdir($structure, 0777, true)) {
        die('Echec lors de la création des répertoires...');
    }
    J'ai cependant du mal écrire ceci: if (system.IO.directory.exists('./upload/'.$societeID.'/')) car j'ai l'erreur Fatal error: Call to undefined function exists()

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system.IO.directory.exists
    je crois que cette fonction s'utilise en .Net et pas en PHP pour vérifier l'existence d'un dossier il y a http://fr.php.net/manual/fr/function.is-dir.php

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    merci c'est tout à fait cela !

    par contre j'ai les dossiers qui se mettent avec une permission fle(02755) et les fichiers adfr(0644). Pourtant dans mon code j'ai spécifié 0777. Je ne peux maintenant plus les enlever ni les modifier...

  13. #13
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Enlèves les dans le code avec la fonction unlink()

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    ok, mais n'y a t'il pas une erreur dans mon code pour que les permissions ne soient pas en 777 comme je l'ai noté ?

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, 23h21
  2. [Upload] Problème d'upload de fichier
    Par Halukard dans le forum Langage
    Réponses: 10
    Dernier message: 21/11/2006, 20h36
  3. [Upload] Problème d'upload de fichiers
    Par karo91 dans le forum Langage
    Réponses: 19
    Dernier message: 07/11/2006, 00h24
  4. [Upload] Problème pour uploader un fichier dans mon code
    Par Peuplarchiste dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2006, 10h48
  5. [Upload] Problème d'upload de fichiers
    Par FredMines dans le forum Langage
    Réponses: 9
    Dernier message: 26/04/2006, 18h13

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