PARCOURIR UN RÉPERTOIRE ET SES SOUS SOUS SOUS... RÉPERTOIRE ET RETOURNER LES FIC

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 20 janv. 2007 à 15:32
pierrelouis94 Messages postés 1 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 26 septembre 2010 - 26 sept. 2010 à 16:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41182-parcourir-un-repertoire-et-ses-sous-sous-sous-repertoire-et-retourner-les-fichiers-qui-ont-l-extension-voulue

pierrelouis94 Messages postés 1 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 26 septembre 2010
26 sept. 2010 à 16:49
Une petite erreur à la ligne 22 :
Il faut mettre $tableauDeFichier= ParcourirDossier($LienRepertoir.$nomFichier."/",$extentionRecherchee,$tableauDeFichier); sinon les sous dossiers manqueront de / dans leur lien.
t1amat Messages postés 5 Date d'inscription mardi 15 septembre 2009 Statut Membre Dernière intervention 3 mai 2011
28 avril 2010 à 16:03
Donc j'ai trouver la solution a mon problème.
Chez moi l'appel récursif ne fonctionnais pas j'ai donc fait une mofification de la fonctione (au niveau du rappel de la fonctio) j'ai aussi bouger l'ordre des conditions.

function ParcourirDossier($LienRepertoir,$extentionRecherchee="",$tableauDeFichier=false)
{
if(!$tableauDeFichier)
{
$tableauDeFichier=array();
}
if(is_dir($LienRepertoir))
{
$ClassDir= dir($LienRepertoir);
while(($nomFichier=$ClassDir->read())!=false)
{
if($nomFichier=='.'||$nomFichier=='..')
{
continue;
}
elseif(strstr($nomFichier,$extentionRecherchee))
{

array_push($tableauDeFichier,$LienRepertoir.$nomFichier);
}
else
{
//si vous enlevez se commentaire vous aurez le nom des dossiers en plus
//array_push($tableauDeFichier,$LienRepertoir."/".$nomFichier);
if(!strstr($LienRepertoir.$nomFichier[0],'.'))/** inclue pas les dossier cacher*/
{$tableauDeFichier= ParcourirDossier($LienRepertoir.$nomFichier.'/',$extentionRecherchee,$tableauDeFichier);}
}

}
return $tableauDeFichier;
}
else
{
return false;
}
}
t1amat Messages postés 5 Date d'inscription mardi 15 septembre 2009 Statut Membre Dernière intervention 3 mai 2011
27 avril 2010 à 16:02
Bonjour,

pour ma part le script scan le répértoire source mais pas ces sous répetoire.
tpkennes Messages postés 4 Date d'inscription mercredi 25 mars 2009 Statut Membre Dernière intervention 19 septembre 2009
19 sept. 2009 à 10:38
Merci pour ta réponse et désolé de n'avoir pas mis à jour mon commentaire.

J'avais trouvé la solution, en fait ce code marche parfaitement. Le problème venait du fait que sur PC1, je lance xampplite (donc avec mon user) alors que sur PC2, le service Apache était lancé en tant que service Windows et que par défaut, l'utilisateur qui lance ce service est "Système Local".

Il suffisait donc de changer cet utilisateur car "Système Local" n'a pas accès à des ressources réseaux.

Encore merci.
cs_micmonay Messages postés 6 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 25 mai 2007
19 sept. 2009 à 10:33
Hello,

Si c'est le même site essaye de partir toujours depuis la racine de ton site.

A+
tpkennes Messages postés 4 Date d'inscription mercredi 25 mars 2009 Statut Membre Dernière intervention 19 septembre 2009
10 août 2009 à 17:31
Bonjour,

J'ai besoin d'aide :). Mon problème est bizarre et je comprends vraiment pas ce qui se passe.

cette fonction fonctionne parfaitement lorsque je la teste sur mon PC (PC1), voici le nom du dossier que j'utilise :
$Path = '\\\\servername\\c$\\dossier\\sousdossier;

Je viens de le mettre sur un autre ordi (PC2) et ca ne marche plus au moment du test if(is_dir()), il n'arrive pas à vérifier s'il s'agit d'un dossier ou pas.
Le truc étrange c'est que si je le lance via un fichier .bat contenant :

C:\xampplite\php\php.exe -c C:\xampplite\apache\bin\php.ini C:\web\SCRIPTMOTEUR\main.php

et bien cela fonctionne parfaitement,
en résumé, le script fonctionne lorsque je lance en .bat sur PC2, également via PHP sur PC1 mais ne fonctionne pas en PHP sur PC2.

Savez-vous d'où peut venir ce probleme ?

merci
mtrzen Messages postés 18 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 13 mars 2007
13 mars 2007 à 19:20
Tres pratique, cela me sauve la vie, je venais de faire une fonction listant les dossiers et sous dossiers comme la tienne, mais l avantage de la tienne est la possibilité de faire un tri avant affichage

rsort($tableFichier);
avant
foreach($tableFichier as $lienFichier)
tgk Messages postés 1 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 10 mars 2007
10 mars 2007 à 18:46
Bonjour,

Je cherche un script comme celui-ci mais j'ai pas vraiment compris comment on l'utilise. un petit exemple serait la bienvenu.

Merci
trpp111 Messages postés 5 Date d'inscription mercredi 29 juin 2005 Statut Membre Dernière intervention 22 janvier 2007
22 janv. 2007 à 17:14
Je ne met pas de note pour cette qource, ne l'ayant pas testée, et pour cause : je n'arrive pas à accéder à un répertoire distant.
Mon problème est de lister et traiter les fichiers contenus dans un répertoire situé sur une machine du réseau.
Quelle est la syntaxe du chemin pour y accéder?
Si quequ'un a une idée, merci de vos réponses!!
(je testerai cette source ensuite )
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
20 janv. 2007 à 15:32
Salut...

$extention=eregi_replace("\.","\\.",$extentionRecherchee);

utilise str_replace() plutot que eregi_replace() pour un remplacement sans expression rationnelle... tu gagnera en perf... de meme pour...

eregi(".*$",$nomFichier)

mieux vaut faire...

in_array(substr($nomFichier,strrpos('.',$nomFichier)),$extensions)

d'ailleur concernant la recherche des extensions mieux vaut passer un tableau directement en argument plutot que passer par une chaine que tu traite ensuite... tu met en premier dans ta boucle...

if($nomFichier '.' || $nomFichier '..')
continue;

et ensuite...

if(is_dir($LienRepertoir."/".$nomFichier))
{
// traitement d'un répertoire
}
elseif(empty($extentionRecherchee) ||
in_array(substr($nomFichier,strrpos('.',$nomFichier)),$extentionRecherchee))
{
// traitement d'un fichier
}

Utilise plutot la constante...

DIRECTORY_SEPARATOR

plutot que

"/"

tu gagnera en portabilité

$grandeurTableau = count($tableauDeFichier);
If($tableauDeFichier[0]=='')
{
$tableauDeFichier[0]=$LienRepertoir."/".$nomFichier;
}
else
{
$tableauDeFichier[$grandeurTableau]=$LienRepertoir."/".$nomFichier;
}

le count est inutile...

if(empty($tableauDeFichier[0]))
$tableauDeFichier[0]= $LienRepertoir.DIRECTORY_SEPARATOR.$nomFichier;
else
$tableauDeFichier[]= $LienRepertoir.DIRECTORY_SEPARATOR.$nomFichier;

un truc con mais ta boucle s'arrêtera si php tombe sur un fichier appelé 0 donc fais plutot

while(false !($nomFichier $ClassDir->read()))

@ tchaOo°
Rejoignez-nous