francoisch Posté 1 Mars 2008 Posté 1 Mars 2008 bonjour Comme Glob() ne fonctionne pas sur le serveur sur lequel se trouve un de mes sites, je cherche un remplacement; j'ai trouvé cette fonction: function glob_rec($pattern, $path) {return explode("\n", shell_exec("find $path -name $pattern"));} mais il me manque une explication pour la faire fonctionner. En effet, je ne sais manifestement pas exprimer $path, ne connaissant pas le langage Shell; j'ai essayé et cherché mais sans trouver jusqu'ici. Pour le répertoire où se trouve la page contenant la fonction, j'ai essayé $files = glob_rec("*.*",""); Pour un sous-répertoire, j'ai essayé $files = glob_rec("*.*","/Clic 1 Initiation"); sans succès. Merci de m'indiquer comment faire, si possible avec un exemple ou deux. Francois
Kioob Posté 1 Mars 2008 Posté 1 Mars 2008 Hello, je ne vois pas pourquoi la fonction "glob" ne fonctionnerait pas ; toutefois le mieux à mon avis pour la remplacer serait une boucle opendir + utilisation de fnmatch.
francoisch Posté 1 Mars 2008 Auteur Posté 1 Mars 2008 Oui, j'ai vu simplement dans un Forum que Golb ne fonctionne pas sur de vieux serveurs Sun; je n'en sais pas plus. Ce dont je suis sûr, c'est que Glob ne fonctionne pas sur ce site. J'ai un Glob sur un autre site chez un autre hébergeur qui fonctionne parfaitement. Aurais tu un exemple de mise en oeuvre de ce que tu suggères? Par avance merci de ton aide. Francois
Kioob Posté 1 Mars 2008 Posté 1 Mars 2008 (modifié) Pour un "exemple de mise en oeuvre", et bien il y a la doc officielle : - comment parcourir un dossier avec opendir : http://fr.php.net/opendir - comment appliquer un masque de type "*.truc" à un nom de fichier : http://fr.php.net/fnmatch Mais j'ai toujours un sérieux doute qu'elle ne fonctionne pas chez ton hébergeur. D'ailleurs quand tu dis qu'elle ne fonctionne pas, c'est qu'elle ne retourne pas le résultat attendu ou bien qu'elle affiche un message d'erreur (et lequel ?). A mon avis il s'agit simplement d'une mauvaise utilisation de la dite fonction... Modifié 1 Mars 2008 par Kioob
petit-ourson Posté 2 Mars 2008 Posté 2 Mars 2008 Je suis en forme : <?php$_foo ='/server/public_html/path/';function s_glob($dir){$files = array();if(is_dir($dir)){ if($dh=opendir($dir)){ while(($file = readdir($dh)) !== false){ $files[]=$dir.$file; }}}return $files;}print_r(s_glob($_foo));?> Source : http://fr2.php.net/manual/fr/function.glob.php
francoisch Posté 2 Mars 2008 Auteur Posté 2 Mars 2008 bonjour et merci de vos réponses, je vais tester ça demain dès que possible et je vous tiendrai au courant. Pour Glob qui ne fonctionne pas, c'est simplement que l'array, qui devrait avoir qqes lignes, est vide. Merci encore. Francois
francoisch Posté 2 Mars 2008 Auteur Posté 2 Mars 2008 bonjour Petit ourson. Une question de base: ce que tu mets dans $_foo ='/server/public_html/path/'; est un chemin relatif ou absolu? Francois
Kioob Posté 2 Mars 2008 Posté 2 Mars 2008 Pour Glob qui ne fonctionne pas, c'est simplement que l'array, qui devrait avoir qqes lignes, est vide. Ce qui aurait fortement tendance à confirmer la mauvaise utilisation ; non ?
petit-ourson Posté 3 Mars 2008 Posté 3 Mars 2008 Une question de base: ce que tu mets dans$_foo ='/server/public_html/path/'; est un chemin relatif ou absolu? Avec un '/' devant, c'est forcément absolu. Mais cela doit fonctionner en relatif (avec tous les problèmes que cela peut poser). Cela fonctionne exactement comme la fonction 'glob'.
francoisch Posté 3 Mars 2008 Auteur Posté 3 Mars 2008 Merci de ta réponse Petit-ourson, qui m'a en particulier permis d'apprendre qqchose sur la déclaration des chemins absolu / relatif. Avec ton code, le Print_r a bien montré les fichiers existants dans le sous-répertoire choisi: $_foo ='Clic 1 Initiation';function s_glob($dir){$files = array();if(is_dir($dir)){ if($dh=opendir($dir)){ while(($file = readdir($dh)) !== false){ $files[]=$dir.$file; }}}return $files;}print_r(s_glob($_foo)); Simplement, quand je remplace le Print_r par: if (!$files) { echo 'Aucun fichier présent dans le répertoire.'; }else { foreach ($files as $filename) {echo "$filename occupe " . filesize($filename) . " octets\n";}} j'ai le message Aucun fichier présent... Mon tout petit niveau de compétence en Php ne m'a pas encore permis de trouver mon erreur. Merci encore de ton aide. Francois
petit-ourson Posté 3 Mars 2008 Posté 3 Mars 2008 Tu cherches à savoir si $files est FALSE or il ne sera jamais faut vu qu'il est initialisé : $files = array(); (même si je crois que ton problème est surtout un problème de portées de variable). Il faudrait plutôt faire un count($files) < 1 $files = s_glob($_foo);if (count($files) < 1){ echo 'Aucun fichier présent dans le répertoire.'; }else { foreach ($files as $filename){echo "$filename occupe " . filesize($filename) . " octets\n";}}
francoisch Posté 3 Mars 2008 Auteur Posté 3 Mars 2008 (modifié) bonsoir Petit-ourson et merci de tes efforts. Je commence, grace à toi, à arriver à un résultat positif, je "vois" les fichiers présents dans un sous-répertoire; j'ai encore du travail à faire pour que ce soit impeccable mais je suis maintenant sur la bonne piste. Une dernière petite question: pour cibler le même répertoire que celui où se trouve la page avec cette fonction s_glob, je met quoi dans $foo? J'ai essayé *, un espace, un vide, ... sans résultat. Pour compléter mon histoire avec son commencement, j'avais essayé de faire fonctionner qqechose comme ça: <?php$files = glob("*.*");foreach ($files as $filename) {echo "$filename occupe " . filesize($filename) . " octets\n";}?> et j'avais obtenu ce message: Invalid argument supplied for foreach() ; j'avais compris / cru comprendre que le Glob ne donnait rien. J'avais donc recherché un remplacement à Glob(), en particulier après avoir lu dans un forum que Glob() ne fonctionnait pas sur certains vieux serveurs Sun. Merci encore de ton aide. Francois Modifié 3 Mars 2008 par francoisch
francoisch Posté 4 Mars 2008 Auteur Posté 4 Mars 2008 bonjour Petit-ourson Un autre petite question: comment lister uniquement les fichiers *.ppt dans ta fonction? Je préfère te demander plutôt que de messacrer ton code. Par avance merci de ton aide. Francois
petit-ourson Posté 4 Mars 2008 Posté 4 Mars 2008 Ce n'est pas mon code, c'est le code de l'aide en ligne de PHP. function s_glob($dir, $typeFile=null){$files = array();if(is_dir($dir)){ if($dh=opendir($dir)){ while(($file = readdir($dh)) !== false){ if($typeFile == null || ereg('\.'.$typeFile.'$', $file)) { $files[]=$dir.$file; } } }}return $files;}$files = s_glob($_foo, 'ppt'); Je filtre uniquement par l'extension (avec toutes les erreurs que cela peut engendrer).
francoisch Posté 4 Mars 2008 Auteur Posté 4 Mars 2008 (modifié) bonjour et merci de ta précision qui permet de choisir les fichiers par leur extension. Une petite question: comment spécifier $foo pour désigner le répertoire courant? J'ai essayé *, ., un espace, un vide, ... sans résultat. Par avance encore merci de ton aide précieuse. Francois Modifié 4 Mars 2008 par francoisch
francoisch Posté 6 Mars 2008 Auteur Posté 6 Mars 2008 bonjour Petit-ourson. Ca y est, ça marche; j'avais cherché un peu partout mais je n'avais rien trouvé. Je serais tenté de dire que tu es le meilleur mais ça pourrait te faire gonfler exagérement les chevilles. Hors toute plaisanterie, merci encore de ton aide patiente et efficace. Francois
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant