繁体   English   中英

使用PHP搜索多个目录中的文件

[英]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>

原始项目: https : //github.com/skfaisal93/AnyWhereInFiles

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM