2013-09-18 5 views
0

Я написал несколько сценариев некоторое время назад, в основном, поиск указанной папки на сервере и возврат списка изображений в этой папке. Каталог был задан с помощью переменной, которая изменилась в зависимости от того, какой раздел вы искали.Поиск файлов в нескольких каталогах с использованием PHP

Но теперь мне нужно изменить это так, чтобы он искал все каталоги и перечислил изображения из разных каталогов.

Вот сценарий, я в настоящее время используют:

<?php 
$dir = "assets/folder1/subfolder1/"; 

// Open a known directory, and proceed to read its contents 
if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
     while (($file = readdir($dh)) !== false) { 
      if(stristr($file,$_POST['image_search'])){ 
       echo('<li><a href="/'.$dir . $file.'">'. $file .'</a></li>'."\n"); 
      } 
     } 
     closedir($dh); 
    } 
} 
?> 

То поиск активов/Folder1/нет проблем, но у меня есть (folder1/subfolder2, folder2/subfolder1, folder2/subfolder2/и т.д. и т.п.)

Думая, что в каталогах должен быть какой-то поиск подстановочных знаков и т. Д., Но он действительно пытается обдумать это!

Я думал, что-то вроде Glob может помочь, но не очень повезло с этим либо

$dir = glob("/assets/*/*/"); 
+1

http://php.net/manual/en/class.recursivedirectoryiterator.php – Fabor

ответ

0

Насколько я знаю, вы должны были бы перебрать все и проверить, если is_dir(). Я предложил бы использовать объект для этого, таких как:

$dir = new Folder('/'); 
$contents = $dir->find('*'); 
foreach ($contents as $content) { 
    if (is_dir($content)) { 
     //do something 
    } 
} 

Вы можете только сделать его искать определенные каталоги тоже просто исправить джокер.

0

Если я правильно понимаю, вы могли бы использовать glob функция

$dir = '/path/to/directory/'; 
$files = glob($dir."*.{jpg,gif,png}", GLOB_BRACE); 
0
<?php 
/*********************************************************************** 
* @name AnyWhereInFiles 
* @author Faisal Shaikh 
* @abstract This project is to find out a part of string from anywhere in any folder 
* @version 1.0 
* @package anywhereinfiles 
* 
* 
* 
* 
*************************************************************************/ 
session_start(); 
?> 
<title>Any where In Files || AnyWhereInFiles.php</title> 
<head> 
    <style> 
     h1{color: #233E99;} 
     td{ font-size:11px; font-family:arial;vertical-align:top;border:1px solid #fff;} 
     a{font-size:11px; font-family:arial;} 
     .me{font-size:11px; font-family:arial;color:#333;} 
    </style> 
</head> 
<h1>AnyWhereInFiles.php</h1> 
<form action="<?php 
echo $_SERVER['PHP_SELF']; 
?>" method="POST"> 
    <table> 
     <tbody> 
      <tr> 
       <td><label for="search">String </label></td> 
       <td><input id="search" type="text" name="search" placeholder="Enter your string" value="<?php 
if (isset($_SESSION['searchString']) && $_SESSION['searchString'] != null) 
    echo $_SESSION['searchString']; 
?>" /></td> 
      </tr> 
      <tr> 
       <td><label for="directory">Folder </label></td> 
       <td><input id="directory" type="text" name="directory" value="<?php 
echo getcwd(); 
?>" /></td> 
      </tr> 
      <tr> 
       <td><label for="case">Case Sensitive </label></td> 
       <td><input type="checkbox" name="case" /></td> 
      </tr> 
      <tr> 
       <td><label for="maxtime">Max Execution Time </label></td> 
       <td><input type="text" name="maxtime" value="30"/></td> 
       <td>Do not change the value if you do not have an idea about it.</td> 
      </tr> 
      <tr> 
       <td><input type="submit" value="Search the string" /></td> 
      </tr> 
     </tbody> 
    </table> 
</form> 

<?php 
function getDirContents($dir, &$results = array()) 
{ 

    if ($_POST['search'] == null) 
     exit; 

    ini_set('max_execution_time', $_POST['maxtime']); 

    $_SESSION['searchString'] = $_POST['search']; 

    echo "<script>var elm = document.getElementById('search');elm.value='$_POST[search]';</script>"; 

    if (!isset($_POST['case'])) 
     $string = strtolower($_POST['search']); 
    else 
     $string = $_POST['search']; 
    $files = scandir($dir); 

    foreach ($files as $key => $value) { 
     $path = realpath($dir . DIRECTORY_SEPARATOR . $value); 
     if (!is_dir($path)) { 
      $content = file_get_contents($path); 
      if (!isset($_POST['case'])) 
       $content = strtolower(file_get_contents($path)); 
      if (strpos($content, $string) !== false) { 
       echo $path . "<br>"; 
      } 
      $results[] = $path; 
     } else if ($value != "." && $value != "..") { 
      getDirContents($path, $results); 
      $results[] = $path; 
     } 
    } 
    return $results; 
} 
if (isset($_POST['directory'])) 
    getDirContents($_POST['directory']); 
//---------------------------------------------------------------------------------------------------------------------------------// 
//@endof file anywhereinfiles.php 
//@note if you have query, need, idea, help; feel free to contact [email protected] 
?> 

<br/> 
<br/> 
<span class="me">"AnyWhereInFiles" is a Open Source Project, developed by <a href="mailto:[email protected]">Faisal Shaikh</a> . 
<br /> 
<a href="https://github.com/skfaisal93/AnyWhereInFiles">https://github.com/skfaisal93/AnyWhereInFiles</a> 
</span> 

Оригинальный проект: https://github.com/skfaisal93/AnyWhereInFiles

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