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 :

Répertoires et fichiers uploadés sur le serveur avec un formulaire


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut Répertoires et fichiers uploadés sur le serveur avec un formulaire
    [EDIT : nouveau problème, voir post suivant]

    Bonjour,

    je suis en train de réaliser un extranet et je dois gérer les données.
    Il faut que l'on puisse télécharger des fichiers sur le serveur (qui sera ma propre machine) et ensuite avoir la liste des fichiers téléchargés, via PHP.

    Je sais que pour créer un dossier on utilise la fonction mkdir(). Que s'il y a des sous dossiers, il faut à chaque fois réutiliser mkdir, que l'on ne peut pas tout créer d'un coup car ça ne gère pas l'arborescence (vous me dites si je me trompe hein).
    Ensuite, vient l'upload des fichiers dans les dossiers qui vont bien.

    Est-ce la fonction move_uploaded_file() qu'il faut utiliser ou me suis-je trompée ? Peut-on grâce à cette fonction (ou une autre si ce n'est pas celle là) uploader plusieurs fichiers dans le même dossier sans risque d'en écraser un autre déjà présent ?

    Est-ce la meilleure solution que d'uploader les fichiers dans des dossiers sur le serveur web et d'enregistrer dans la table le chemin d'accès au fichier (via un input de type "file" et on enregistre le http:// ... comme chemin d'accès) ? Si oui, mon champ dans ma base de données est juste de type "text" ?

    Et enfin, quelle est la fonction permettant de télécharger depuis la page de l'extranet, un fichier ? il suffit de mettre un <a href="..."></a> avec le chemin d'accès et en cliquant on aura la possibilité d'enregistrer le fichier ?

    Ah et dernière question pour la route (pour le moment) : que ce soit une image, un fichier PDF ou un fichier WORD, est-ce que la méthode est la même ?

    Merci =)

  2. #2
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut !

    Citation Envoyé par baggie Voir le message
    Je sais que pour créer un dossier on utilise la fonction mkdir(). Que s'il y a des sous dossiers, il faut à chaque fois réutiliser mkdir, que l'on ne peut pas tout créer d'un coup car ça ne gère pas l'arborescence (vous me dites si je me trompe hein).
    C'est cela !

    Citation Envoyé par baggie Voir le message
    Ensuite, vient l'upload des fichiers dans les dossiers qui vont bien.
    Est-ce la fonction move_uploaded_file() qu'il faut utiliser ou me suis-je trompée ? Peut-on grâce à cette fonction (ou une autre si ce n'est pas celle là) uploader plusieurs fichiers dans le même dossier sans risque d'en écraser un autre déjà présent ?
    Oui, c'est cette fonction. Tu trouveras dans les tutoriels un très cours sur l'upload de fichier. Avant d'uploader ton fichier, il te faudra vérifier si cela-ci n'existe pas déjà (file_exists()). Pour uploader plusieurs fichiers, il faut appeler plusieurs fois la fonction move_uploaded_file();

    Citation Envoyé par baggie Voir le message
    Est-ce la meilleure solution que d'uploader les fichiers dans des dossiers sur le serveur web et d'enregistrer dans la table le chemin d'accès au fichier (via un input de type "file" et on enregistre le http:// ... comme chemin d'accès) ? Si oui, mon champ dans ma base de données est juste de type "text" ?
    C'est une des solutions, avec un champ "text" ou "varchar". Tout dépend de ce que tu souhaites faire par la suite. Tu peux aussi avoir plusieurs champs : nom du fichier, extension, chemin, permettant ensuite un classement plus précis.

    Citation Envoyé par baggie Voir le message
    Et enfin, quelle est la fonction permettant de télécharger depuis la page de l'extranet, un fichier ? il suffit de mettre un <a href="..."></a> avec le chemin d'accès et en cliquant on aura la possibilité d'enregistrer le fichier ?
    Oui

    Citation Envoyé par baggie Voir le message
    Ah et dernière question pour la route (pour le moment) : que ce soit une image, un fichier PDF ou un fichier WORD, est-ce que la méthode est la même ?
    Oui. Il faudra par contre bien t'assurer que si tu attends un fichier word, c'est bien un fichier word et non pas autre chose (comme un .exe ou un virus..).

    Citation Envoyé par baggie Voir le message
    Merci =)
    De rien
    A+

  3. #3
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Et ben pour une réponse claire, c'est une réponse claire ^^
    Merci beaucoup !

  4. #4
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Je me permets de faire remonter mon post car j'ai un problème avec l'upload

    J'ai repris tout le script du cours php que l'on m'a donné ci-dessus, lors de l'envoi de la page/soumission de mon formulaire, je n'ai aucune $erreur relevée mais dans mon dossier upload/ je n'ai strictement aucun fichier.

    J'ai mis le dossier upload dans mon dossier "www" où il y a toutes mes pages, est-ce correct ?

    Enfin bref, je ne comprends pas bien pourquoi ça ne fonctionne pas.

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tr><td>Document</td><td><input type="file" name="lien_document" /></td></tr>
    Et :
    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
     
    // Upload du document sur le serveur
    $dossier = 'upload/';
    $fichier = basename($_FILES['lien_document']['name']);
    $taille_maxi = 100000;
    $taille = filesize($_FILES['lien_document']['tmp_name']);
    $extensions = array('.txt', '.gif', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['lien_document']['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 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);
    	 if(move_uploaded_file($_FILES['lien_document']['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;
    }
    Le lien posté par l'utilisateur est aussi récupéré dans la bdd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lien = $_POST['lien_document'];
    Et là il croit que le champ est vide apparemment et me dit :
    Notice: Undefined index: lien_document in C:\Program Files\EasyPHP5.3.0\www\ajout_document.php on line 97

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Points : 182
    Points
    182
    Par défaut
    As tu bien indiquer dans ta balise <form> l'attribut enctype="multipart/form-data".
    Je le précise quand même au cas où!

  6. #6
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Oui je l'ai bien ajoutée !

  7. #7
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Points : 182
    Points
    182
    Par défaut
    Ben c'est normal suis-je bête, tu peux pas le récupérer via $_POST mais via $_FILES étant donné que c'est un input de type files

  8. #8
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Aaaaaaaaaaaaah ça fonctionneeeeeeee

    Roh bah merci bien pour l'aide hein !

    C'était pas si compliqué que ça à trouver mais euh ben j'avais pas trouvé

    EDIT : comment puis-je récupérer l'adresse du lien du coup ? (pour le mettre dans ma base de données)

    EDIT 2 : j'ai trouvé ma réponse !

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

Discussions similaires

  1. [Débutant] Upload d'une fichier sur un serveur avec Windows Store App
    Par ChrisNilson dans le forum WinRT
    Réponses: 2
    Dernier message: 26/07/2014, 00h30
  2. Scanner les fichiers uploadés sur mon serveur
    Par jinpol dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2010, 08h28
  3. [XML] Créer un fichier sur le serveur avec le contenu d'une requête POST
    Par kingmandrax dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 27/10/2006, 00h18
  4. Réponses: 2
    Dernier message: 31/07/2006, 16h26

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