1

興味深い問題: ファイルとディレクトリの山からキーワードを検索すると、関数がファイル名を配列として返します。

$files = array();

function search_in_dir($dir, $str) {
    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)) as $filename) {
        $files[] = $filename;
    }

    foreach ($files as $k => $file) {
        $source = file_get_contents($file);
        if (strpos($source, $str) === false) {
            unset($files[$k]);
        }
    }
    return array_filter($files);
}

$filenamesWithPaths = search_in_dir("/home/Documents", "testKeyword");

変数$filenamesWithPathsには、ファイル名とパスの配列が含まれるようになりました。ただし、最終的に達成したいのは、連想配列、またはファイル名を含むパスと周囲のテキスト (私の場合は HTML コード) を含むコレクションです。

キーワードが見つかった行全体を返し、それを他の命令でさらに削除することは想像に難くないでしょう。

4

2 に答える 2

0

file () — ファイル全体を配列に読み込む

foreach の各項目を反復処理して、一致するものを見つけることができます。

インデックスが 23 の場合、それは 24 行目にあります。そのように単純にして、出力配列を好きなように構築してください。

于 2012-08-21T14:42:20.360 に答える
0

Stackoverflow コミュニティは、機能の検索に php を使用しないことを強く推奨しているため、find を使用します。これは、grep よりもパフォーマンスが優れています。

$search = 'find ' . $directory . ' -type f -exec grep -r ' . $keyword . ' {} + '
shell_exec($search);

パス+ファイル名と周囲のコンテキストをphpのコレクションに保存することが次のステップです。ただし、これはどういうわけか機能していません:

$RESULT = shell_exec('find ' . $domain . ' -type f -exec grep -r ' . $keyword . ' {} + ');

$arr = explode('/index.html:', $RESULT);

パスと周囲のコンテキストを取得する方法; grep出力を最適に解析する方法のように?

于 2012-08-21T15:01:11.217 に答える