Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2007, 17h57   #1
Membre du Club
 
Avatar de mickado
 
Inscription : janvier 2007
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 154
Points : 52
Points : 52
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.
__________________
Venez voir par là...
mickado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2007, 18h22   #2
Membre régulier
 
Avatar de The Nux
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : février 2006
Messages : 79
Points : 84
Points : 84
Envoyer un message via MSN à The Nux
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 :
Citation:
<?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);
}
?>
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'à ^^
The Nux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2007, 18h38   #3
Membre du Club
 
Avatar de mickado
 
Inscription : janvier 2007
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 154
Points : 52
Points : 52
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 :
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
__________________
Venez voir par là...
mickado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2007, 19h04   #4
Membre régulier
 
Avatar de The Nux
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : février 2006
Messages : 79
Points : 84
Points : 84
Envoyer un message via MSN à The Nux
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 :
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 :
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...
The Nux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2007, 19h26   #5
Membre du Club
 
Avatar de mickado
 
Inscription : janvier 2007
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 154
Points : 52
Points : 52
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
__________________
Venez voir par là...
mickado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2007, 19h50   #6
Membre régulier
 
Avatar de The Nux
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : février 2006
Messages : 79
Points : 84
Points : 84
Envoyer un message via MSN à The Nux
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 !
The Nux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2007, 19h58   #7
Membre du Club
 
Avatar de mickado
 
Inscription : janvier 2007
Messages : 154
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 154
Points : 52
Points : 52
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 :
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
__________________
Venez voir par là...
mickado est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h16.


 
 
 
 
Partenaires

Hébergement Web