用于什么呢,项目交付的时候,避免关键字出现,会列出所有文件路径,但是如果你图片或者二进制文件,比如word里面有的话,这个工具就有点无能为力了。
上代码
<?php
/**
- 遍历目录及子目录,查找包含指定关键字的文件
- 将结果输出到result.txt文件中
*/
// 要查找的关键字
$keyword = '四川';
// 结果文件路径
$resultFile = 'result.txt';
// 存储找到的文件路径
$foundFiles = array();
/**
- 递归遍历目录
- @param string $dir 目录路径
*/
function scanDirectory($dir, $keyword, &$foundFiles) {
// 检查目录是否存在且可访问
if (!is_dir($dir) || !is_readable($dir)) {
return;
}
// 打开目录
$directory = opendir($dir);
// 遍历目录中的文件和子目录
while (($file = readdir($directory)) !== false) {
// 跳过当前目录和父目录
if ($file == '.' || $file == '..') {
continue;
}
$fullPath = $dir . DIRECTORY_SEPARATOR . $file;
// 如果是目录,则递归处理
if (is_dir($fullPath)) {
scanDirectory($fullPath, $keyword, $foundFiles);
}
// 如果是文件,检查是否包含关键字
elseif (is_file($fullPath) && is_readable($fullPath)) {
// 尝试读取文件内容
$content = file_get_contents($fullPath);
// 检查内容是否包含关键字
if ($content !== false && strpos($content, $keyword) !== false) {
$foundFiles[] = $fullPath;
echo "找到包含关键字的文件: " . $fullPath . "\n";
}
}
}
// 关闭目录
closedir($directory);
}
// 从当前目录开始扫描
$startDir = getcwd();
echo "开始从 " . $startDir . " 目录及其子目录中查找包含 '" . $keyword . "' 的文件...\n";
// 执行扫描
scanDirectory($startDir, $keyword, $foundFiles);
// 将结果写入文件
if (!empty($foundFiles)) {
$resultContent = "找到 " . count($foundFiles) . " 个包含关键字 '" . $keyword . "' 的文件:\n\n";
$resultContent .= implode("\n", $foundFiles);
if (file_put_contents($resultFile, $resultContent) !== false) {
echo "\n查找完成,结果已保存到 " . $resultFile . " 文件中\n";
} else {
echo "\n查找完成,但无法写入结果到 " . $resultFile . " 文件\n";
echo "找到的文件列表:\n";
echo implode("\n", $foundFiles);
}
} else {
echo "\n未找到包含关键字 '" . $keyword . "' 的文件\n";
// 即使没找到,也创建结果文件
file_put_contents($resultFile, "未找到包含关键字 '" . $keyword . "' 的文件");
}
?>
同样是CLI下执行一下,即可。
评论0
暂时没有评论