PHP实现递归搜索文件目录与匹配文件名

Aria
Aria
发布时间:2026-10-14| 6人浏览过
原创

在需要管理大量文件或进行FTP空间维护时,使用命令行往往不够直观。本文将分享一段基于PHP编写的递归文件查找脚本,它能帮助开发者轻松搜索指定路径下的所有文件和子目录,并根据输入的关键字返回匹配的列表,同时提供详细的数量统计。

适用场景与功能说明

Windows系统自带的文件搜索功能在处理本地磁盘时非常便捷,但当面对线上环境(例如虚拟主机、FTP服务器)时,通常需要借助代码来完成深层目录的遍历。这款PHP文件查找器具有以下特点:

  • 递归搜索:能够深入无限层级的子目录进行搜索。
  • 大小写敏感:默认区分关键字的大小写(符合严格匹配需求)。
  • 双重匹配:不仅匹配文件名,也会检测包含关键字的文件夹路径。
  • 结果汇总:运行结束后会统计扫描的总文件数、总目录数以及最终符合条件的数量和。

准备条件

确保你的PHP服务器环境已启用以下文件系统函数(通常为标准配置):opendir, readdir, closedir, is_dir, 以及字符串处理函数 strstr。

真实操作顺序

第1步:获取源码文件

将下面的完整PHP代码保存为 file_search.php 或其他你喜欢的名称,并上传至服务器的根目录或特定的工作目录下。

<?php
/*
 * PHP版文件查找程序
 * 功能:递归查找指定路径下的文件和文件夹
 */
if(!empty($_POST['path'])&&!empty($_POST['key'])){
 echo "在路径 ".htmlspecialchars($_POST['path'])."/ 中查找 ".htmlspecialchars($_POST['key'])." 的结果为:
"; $file_num = $dir_num = 0; $r_file_num = $r_dir_num= 0; $findFile = $_POST['key']; // 定义递归删除和查找函数(此处复用原逻辑作为遍历器) function delDirAndFile( $dirName ) { if ( $handle = @opendir( "$dirName" ) ) { while ( false !== ( $item = readdir( $handle ) ) ) { if ( $item != "." && $item != ".." ) { if ( is_dir( "$dirName/$item" ) ) { delDirAndFile( "$dirName/$item" ); } else { $GLOBALS['file_num']++; if(strstr($item,$GLOBALS['findFile'])){ echo " $dirName/$item
\n"; $GLOBALS['r_file_num']++; } } } } closedir( $handle ); $GLOBALS['dir_num']++; // 检查目录名是否包含关键字 if(strstr($dirName,$GLOBALS['findFile'])){ $loop = explode($GLOBALS['findFile'],$dirName); $countArr = count($loop)-1; if(empty($loop[$countArr])){ echo " $dirName
\n"; $GLOBALS['r_dir_num']++; } } }else{ // 遇到无权限或无效目录时终止当前分支 return; } } delDirAndFile($_POST['path']); echo "
本次共搜索到".$file_num."个文件,文件夹".$dir_num."个
"; echo "
符合结果的共".$r_file_num."个文件,文件夹".$r_dir_num."个
"; } ?>

第2步:构建前端交互界面

虽然上述PHP代码包含了核心逻辑,但为了便于操作,你需要一个HTML表单来输入搜索路径和关键字。请将以下HTML结构添加在上述代码的前面(位于?>之后),或者直接整合进同一个文件中:

<!DOCTYPE html>
<html lang="zh-CN">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>PHP版文件查找(file search)</title>
 </head>
 <body>
  <form action="" method="post">
   <p> 文件查找(注:区分大小写)</p>
   <p>路径:<input type="text" name="path" value="/public_html" /></p>
   <p>查找:<input type="text" name="key" placeholder="输入关键词" /></p>
   <p><input type="submit" name="sub" value="开始搜索" /></p>
  </form>
 </body>
</html>

第3步:配置路径与安全参数

在浏览器中访问该脚本。在“路径”一栏输入服务器上的绝对路径或相对路径。注意:为了防止目录遍历漏洞,建议在服务器上设置该页面的执行权限仅限于内部管理员,或者在代码中加入路径白名单校验。

在“查找”栏输入你想要定位的文件名或文件夹名。点击“开始”按钮,脚本将自动输出匹配的目录树节点。

完成判断

当页面底部出现类似“符合结果的共X个文件,文件夹Y个”的提示,且上方列表区域显示了包含目标字符串的路径信息时,即表示搜索任务已完成。

原文有依据的排错

  • 权限拒绝:如果看到“没有此路径!”或直接返回空白,通常是PHP运行用户对指定目录缺乏读取权限(Permission Denied)。请检查文件夹的chmod权限(通常需设置为755)。
  • 搜索结果为空:请确认输入的“路径”确实存在内容,且“查找”关键字未输错。由于程序区分大小写,若文件名为 Config.php,请输入 Config 而非 config。

以上就是PHP搜索文件程序的详细内容,更多关于PHP文件管理、本地目录遍历的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。