11

いくつかのフォルダ構造に文字列を検索するための最速のアプローチを探しています。file_get_contentsを使用してファイルからすべてのコンテンツを取得できることは知っていますが、高速かどうかはわかりません。たぶん、速く動作するいくつかの解決策がすでにあります。scandirを使用してすべてのファイルを取得し、file_get_contentsを使用してそのコンテンツを読み取り、strposを使用して文字列が存在するかどうかを確認することを考えていました。

これを行うためのより良い方法があると思いますか?

または、grepでphp execを使用しようとしていますか?

前もって感謝します!

4

2 に答える 2

18

2つのオプションは、DirectoryIteratorまたはglobです。

$string = 'something';

$dir = new DirectoryIterator('some_dir');
foreach ($dir as $file) {
    $content = file_get_contents($file->getPathname());
    if (strpos($content, $string) !== false) {
        // Bingo
    }
}

$dir = 'some_dir';
foreach (glob("$dir/*") as $file) {
    $content = file_get_contents("$dir/$file");
    if (strpos($content, $string) !== false) {
        // Bingo
    }
}

パフォーマンスの観点から、コードのリアルタイム速度をいつでも計算したり、メモリ使用量を非常に簡単に見つけたりすることができます。大きなファイルの場合は、の代わりに使用することをお勧めしますfile_get_contents

于 2013-02-23T14:38:55.180 に答える
3

ディレクトリイテレータとforeachを使用します:http: //php.net/manual/en/class.directoryiterator.php

于 2013-02-23T14:32:00.433 に答える