PHP实现递归搜索文件目录与匹配文件名
在需要管理大量文件或进行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文件管理、本地目录遍历的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









