2010-05-26 5 views
0

une petite question. J'ai ce code, qui fonctionne parfaitement pour les fichiers, mais si j'essaie de chercher sur un nom de répertoire, le résultat est vide. Comment je peux réparer ça?Recherche de fichiers Glob(), question

<?php 
function listdirs($dir,$search) 
{ 
    static $alldirs = array(); 
    $dirs = glob($dir."*"); 
    foreach ($dirs as $d){ 
     if(is_file($d)){ 
      $filename = pathinfo($d); 
      if(eregi($search,$filename['filename'])){ 
       print "<a href=http://someurl.com/" . $d .">". $d . "</a><br/>"; 
      } 
     }else{ 
      listdirs($d."/",$search); 
     } 
    } 
} 
$path = "somedir/"; 
$search= "test"; 
listdirs($path,$search); 
?> 

somedir/test/

résultat: blanc (je veux:/somedir/test /)

somedir/test/test.txt

résultat: OK

Je veux rechercher aussi dans les noms de répertoire, comment je peux faire cela?

Répondre

0

Si vous voulez rechercher un répertoire, vous allez devoir changer le bloc if(is_file($d)). En ce moment, vous l'appelez simplement listdirs quand il rencontre un répertoire ... mais cela signifie également que vous ne verrez jamais un print avec un lien vers ledit répertoire.

Je suggère de faire quelque chose comme ça dans le lieu foreach:

$filename = basename($d); 
    if(eregi($search,$filename)){ 
     print "<a href=http://someurl.com/" . $d .">". $d . "</a><br/>"; 
    } 
    if(is_dir($d)){ 
     listdirs($d."/",$search); 
    } 
+0

Merci beaucoup! Tu m'as beaucoup aidé! – Peter

+0

Une autre petite question, ce code est-il sûr? Les utilisateurs ne peuvent pas lister les fichiers du serveur? Seulement ce que je reçois des utilisateurs est la variable $ search. – Peter

+0

@Peter: Il * devrait * être sûr, à cause de l'appel 'basename'. Cependant, je ne l'ai jamais essayé auparavant, donc je ne peux pas dire avec certitude qu'ils ne peuvent pas en sortir en utilisant des caractères spécialement encodés. – Powerlord

0

Votre script fonctionne correctement. Je pense que l'utilisateur du serveur Web n'a pas d'autorisations pour le répertoire donné.

+0

Dans ce cas, comment est possible cela? Recherche de "deux" un/deux/(structure de répertoire) résultat: blanc (je veux:/une/deux /) Recherche de fichier "test" ou "test.txt" fonctionne très bien. un/deux/test.txt Résultat: OK (résultat: une/deux/test.txt) Recherche de fichiers fonctionne bien, mais tout de la recherche de répertoire non. Je pense que ce n'est pas un problème de prémission. – Peter