用于什么呢,项目交付的时候,避免关键字出现,会列出所有文件路径,但是如果你图片或者二进制文件,比如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下执行一下,即可。