2010-05-26 2 views
0

немного вопрос. У меня есть этот код, который отлично подходит для файлов, но если я пытаюсь выполнить поиск по имени каталога, результат будет пустым. Как я могу это исправить?Glob() файлы поиск, вопрос

<?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/тест/

результат: пустой (я хочу:/somedir/тест /)

somedir/тест/test.txt

результат: OK

Я хочу искать также в именах каталогов, как я могу это сделать?

ответ

0

Если вы хотите найти каталог, вам нужно будет изменить блок if(is_file($d)). Прямо сейчас у вас есть это просто, просто вызовите listdirs, когда он встречает каталог ... но это также означает, что вы никогда не увидите print со ссылкой на указанный каталог.

Я предлагаю делать что-то подобное в 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

Спасибо вам большое! Вы мне очень помогли! – Peter

+0

Другой вопрос, является ли этот код безопасным? Пользователи не могут перечислить файлы сервера? Только то, что я получаю от пользователей, является переменная $ search. – Peter

+0

@Peter: он должен * быть безопасным из-за вызова 'basename'. Тем не менее, я никогда не пробовал это раньше, поэтому я не могу точно сказать, что они не могут вырваться из него, используя специально закодированные символы. – Powerlord

0

Ваш скрипт работает нормально. Я думаю, что пользователь веб-сервера не имеет прав на данный каталог.

+0

В этом случае, как можно это? Поиск «два» один/два/(структура каталогов) результат: пустой (я хочу:/один/два /) Поиск файла «тест» или «test.txt» работает нормально. один/два/test.txt результат: OK (результат: один/два/test.txt) поиск файлов работает нормально, но ни один из поиска в каталоге нет. Я думаю, что это не проблема прелюдии. – Peter

 Смежные вопросы

  • Нет связанных вопросов^_^