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 :

[FTP] Parcours d'un dossier et enregistrement dans base de données


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de mickado
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 154
    Points : 85
    Points
    85
    Par défaut [FTP] Parcours d'un dossier et enregistrement dans base de données
    Bonsoir a tous !

    Je suis entrain de créer un Album photo et j'aimerais savoir si il existe une fonction qui me permette de scanné un dossier sur mon ftp, récuperer tout les noms d'image ainsi que leurs extensions pour ensuite les enregistrer dans une de mes tables Sql.

    Merci.

  2. #2
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    Pour lister les fichiers à l'intérieur d'un dossier il te faut utiliser readdir() (entre autres, l'usage est indiqué dans la documentation)
    Si ça t'intéresse j'ai déjà fait une fonction qui retourne le contenu d'un dossier dans un array :
    <?php
    function&#160;ls($dir,&#160;$with_prefix&#160;=&#160;false)&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;if&#160;(
    substr($dir,&#160;-1)&#160;!==&#160;"/")&#160;$dir&#160;.=&#160;"/";
    &#160;&#160;&#160;&#160;&#160;&#160;unset(
    $dirs);&#160;&#160;&#160;$dirs&#160;&#160;=&#160;array();
    &#160;&#160;&#160;&#160;&#160;&#160;unset(
    $files);&#160;&#160;$files&#160;=&#160;array();
    &#160;&#160;&#160;&#160;&#160;&#160;if&#160;(@
    is_readable($dir)&#160;and&#160;@is_dir($dir))&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(
    $dh&#160;=&#160;opendir($dir))&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;while&#160;((
    $file&#160;=&#160;readdir($dh))&#160;!==&#160;false)&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(@
    is_readable($dir.$file))&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(
    is_dir($dir.$file))&#160;$dirs&#91;]&#160;=&#160;($with_prefix)&#160;?&#160;$dir.$file&#160;:&#160;$file;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;
    $files&#91;]&#160;=&#160;($with_prefix)&#160;?&#160;$dir.$file&#160;:&#160;$file;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    closedir($dh);
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    &#160;&#160;&#160;&#160;&#160;&#160;}
    &#160;&#160;&#160;&#160;&#160;&#160;else&#160;return&#160;
    false;
    &#160;&#160;&#160;&#160;&#160;&#160;unset(
    $dirs&#91;0]);
    &#160;&#160;&#160;&#160;&#160;&#160;unset(
    $dirs&#91;1]);
    &#160;&#160;&#160;&#160;&#160;&#160;return&#160;array(
    $dirs,&#160;$files);
    }
    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com
    Origine du code

    La fonction ls() liste le contenu d'un dossier dans un array. Ce qui est renvoyé est un array contenant 2 autres arrays : le premier array c'est les dossiers et le deuxième array c'est les fichiers.

    Une fois la liste des fichiers en main, je ne te conseille pas de déterminer le type de l'image avec son extension, mais plutôt d'utiliser une fonction comme image_type_to_mime_type() par exemple.

    Ensuite je suppose que tu sais comment mettre les données dans ta base de données... Y'a plus qu'à ^^
    Nouveau bachelier et futur ingénieur
    Et j'ai même un blog !

  3. #3
    Membre régulier Avatar de mickado
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    Enfaite je ne compte faire aucun trie selectifs en ce qui concerne l'extension de mes images.

    je t'explique rapidement.
    J'ai créer un formulaire dans lequels l'utilisateur indique le chemin du dossier a lister dans un textarea.

    a l'envoi de ce formulaire, la fonction listera tout les noms d'image et les enregistrera dans la base de donnée sql.

    si j'ai bien compris ta fonction alors ça devrais donner ça :


    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
    <?php
    $dir= $cheminversdossier ; (récuperation du textarea envoyer par le formulair)
     
    function ls($dir, $with_prefix = false) {
          if (substr($dir, -1) !== "/") $dir .= "/";
          unset($dirs);   $dirs  = array();
          unset($files);  $files = array();
          if (@is_readable($dir) and @is_dir($dir)) {
                if ($dh = opendir($dir)) {
                      while (($file = readdir($dh)) !== false) {
                            if (@is_readable($dir.$file)) {
                                  if (is_dir($dir.$file)) $dirs[] = ($with_prefix) ? $dir.$file : $file;
                                  else $files[] = ($with_prefix) ? $dir.$file : $file;
                            }
                      }
                      closedir($dh);
                }
          }
          else return false;
          unset($dirs[0]);
          unset($dirs[1]);
          return array($dirs, $files);
    }
    ?>
    Donc ici mon dossier visé est listé, ece bien ça ?
    Maintenant que le dossier visé est listé, comment récupérer le tableau qui contient les nom d'image pour ensuite l'enregistrer dans ma table "photos" ?

    Merci pour ton aide

  4. #4
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    Simple question : on parle bien d'un script qui s'execute sur le même serveur que les fichiers ? Ou alors est-ce qu'il faut que le script se connecte à un FTP pour aller chercher les fichiers ?

    À part ça je crois que tu n'as pas vraiment tout compris, puisqu'il s'agit là d'une fonction, au même titre que mysql_connect() est une fonction. Pour plus d'infos, regardes la doc : http://fr.php.net/manual/fr/language.functions.php

    L'important est que quelquepart dans ton fichier il y ai le code (peu importe l'endroit, et tu peux aussi mettre ça dans un autre fichier que tu inclus). Ensuite, ça va ressembler à ça :

    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
    <?php
    // La fonction ls() est déclarée ici dans l'exemple, mais tu peux faire ça n'importe où dans le code
    function ls($dir, $with_prefix = false) {
    	[...]
    }
     
    // On appelle la fonction ls() pour mettre la liste de fichiers et des dossiers du répertoire dans $contenu_du_dossier
    $contenu_du_dossier = ls($cheminversdossier);
    // Et maintenant on met la liste des fichiers uniquement dans $liste_des_fichiers
    $liste_des_fichiers = $contenu_du_dossier[1];
     
    // Maintenant on veut afficher la liste des fichiers
    foreach($liste_des_fichiers as $fichier) {
    	echo $fichier . "<br />\n";
    }
    ?>
    Aussi, est-ce que tu sais utiliser mysql depuis PHP ?

    De plus, ce n'est pas très sécurisé de laisser les utilisateurs lister n'importe quel dossier, il faut que tu fasses attention à filtrer la liste des dossiers autorisés.

    Si tu ne veux enregistrer que les noms d'image dans ta base de données, tu es obligé de faire du "tri séléctif" comme tu dis, car tu dois savoir si le fichier en question est une image ou non... Par exemple à la suite du code plus haut tu peux mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Maintenant on veut afficher la liste des fichiers image
    foreach($liste_des_fichiers as $fichier) {
    	if(exif_imagetype($cheminversdossier . "/" . $fichier) !== false)
    		echo $fichier . "<br />\n";
    }
    et ça n'affichera que les images valides. Tu peux décider d'utiliser un code similaire pour insérer les données dans mysql...
    Nouveau bachelier et futur ingénieur
    Et j'ai même un blog !

  5. #5
    Membre régulier Avatar de mickado
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    l'accé au formulaire est résérvé qu'aux admins.

    Ils envoi leurs dossier contenant leurs photos, il vont sur le formulaire et y indique le chemin vers ce dossier.

    a l'envoi du formulaire le script scan ce dossier qui a été indiquer par l'admin, y récupére le nom complet de chaque fichier, et ajoute un par un les noms des fichiers dans une table.

    Sinon oui je sais utiliser mysql depuis php mais coter function c'est pas trop mon fort

  6. #6
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    Okidoki
    Ça irra avec ce que je t'ai donné ? Ou alors tu as d'autres questions ?
    Et sinon penche toi sérieusement sur les fonctions et la programmation objet, par ce que c'est très important pour structurer correctement son programme, et gagner du temps.
    Nouveau bachelier et futur ingénieur
    Et j'ai même un blog !

  7. #7
    Membre régulier Avatar de mickado
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    Alors voila ça marche parfaitement maintenant !

    <center>
    <form name="form1" method="post" action="ajoutr.php">
    Chemin d'accés au reportage : <input name="chemin" /><br />
    <input type="submit" value="Envoyer" />
    </form>
    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
    include ("../inc/config.php");
     
    function ls($dir, $with_prefix = false) {
          if (substr($dir, -1) !== "/") $dir .= "/";
          unset($dirs);   $dirs  = array();
          unset($files);  $files = array();
          if (@is_readable($dir) and @is_dir($dir)) {
                if ($dh = opendir($dir)) {
                      while (($file = readdir($dh)) !== false) {
                            if (@is_readable($dir.$file)) {
                                  if (is_dir($dir.$file)) $dirs[] = ($with_prefix) ? $dir.$file : $file;
                                  else $files[] = ($with_prefix) ? $dir.$file : $file;
                            }
                      }
                      closedir($dh);
                }
          }
          else return false;
          unset($dirs[0]);
          unset($dirs[1]);
          return array($dirs, $files);
    }
     
     
    if (isset($_POST['chemin']))
    {
    $chemin = $_POST['chemin'] ;
     
    $contenu_du_dossier = ls($chemin);
    $liste_des_fichiers = $contenu_du_dossier[1];
     
    foreach($liste_des_fichiers as $fichier) {
    		mysql_query("INSERT INTO photos (id, fichier) VALUES ('', '" . $fichier . "')");
    }
    }
    ?>
    Si ça peux aider quelqu'un

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/07/2019, 04h23
  2. [MySQL] Upload d'image et enregistrement dans base de données
    Par maumen dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 31/07/2009, 15h54
  3. Réponses: 9
    Dernier message: 02/06/2009, 15h37
  4. Insérer Enregistrement dans Base de données
    Par TurricanII dans le forum JBuilder
    Réponses: 3
    Dernier message: 30/05/2006, 12h59
  5. nbre enregistrements dans base de données
    Par Chonchon dans le forum JDBC
    Réponses: 3
    Dernier message: 09/01/2006, 20h54

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