为目录的所有文件寻找preg_match()(递归)

时间:2017-09-24 18:16:18

标签: php

我想知道如何(递归地)扫描目录文件(100+),在文件内容中查找preg_match()。我正在查看是否有任何文件包含反引号(`)。

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

你可以使用 php 函数opendir尝试这个函数:

    <?php
    function findbacktick ($dir){
    // Open a known directory, and proceed to read its contents
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                preg_match("/'/", $file, $matches);
                if (count($matches)>=1) {
                    echo 'file contains a backtick : '.$file.'</br>-----</br>';
                }
            }
            closedir($dh);
        }
    }
    }
    $dir = "path/to/dir";
    findbacktick ($dir);
    ?>

答案 1 :(得分:0)

您可以在递归函数中包装glob。我给出了以下基本版本的想法。

function find_files($dir, $files = []) {
    foreach (glob($dir."/*") as $file) {
        if(is_dir($file)) {
            $files = find_files($file, $files);
        }
        $content = file_get_contents($dir."/".$file);
        if(preg_match('/[YOUR_PATTERN]/', $content)) {
            $files[] = $file;
        }

    }
    return $files;
}

我还没有尝试过,但我想它应该可行。

PS。它可能会给你内存耗尽错误或超时错误。