[英]Search files in multiple directories using 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);
}
}
?>
搜索資產/文件夾1 /沒問題,但是我也有(文件夾1 /子文件夾2,文件夾2 /子文件夾1,文件夾2 /子文件夾2 /等)
認為必須在目錄等上進行某種通配符搜索,但真的很難考慮它!
我以為glob之類的東西可以幫上忙,但運氣不好
$dir = glob("/assets/*/*/");
據我所知,您需要遍歷所有內容並檢查is_dir()
。 我建議為此使用對象:
$dir = new Folder('/');
$contents = $dir->find('*');
foreach ($contents as $content) {
if (is_dir($content)) {
//do something
}
}
您也只能使其搜索某些目錄,只需修復通配符即可。
如果我正確理解,可以使用glob
函數
$dir = '/path/to/directory/';
$files = glob( $dir."*.{jpg,gif,png}", GLOB_BRACE );
<?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 f.shaikh1993@gmail.com
?>
<br/>
<br/>
<span class="me">"AnyWhereInFiles" is a Open Source Project, developed by <a href="mailto:f.shaikh1993@gmail.com">Faisal Shaikh</a> .
<br />
<a href="https://github.com/skfaisal93/AnyWhereInFiles">https://github.com/skfaisal93/AnyWhereInFiles</a>
</span>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.