外部ファイルを読み込むための命令は、大まかにfile関数とfopen関数の二つがありますが、以下の命令の場合について教えてください。
以下のコードを書きました
file関数
$d4 = file($filedate);
$d3 = join("",$d4);
fopen関数
$d4 = @fopen($filedate,"r");
while(!feof($d4)){
$d3 .= fgets($d4, 3200);
}
fclose($d4);
要するに$d3にファイルソースをすべて読み込ませたいです。実際にはこれをファイル数分ループさせます。
試してみたところfopenは約6000、fileは約26000読み込めました。
fopen命令はこういった命令には向かないのでしょうか?それとも書き方や読み込むファイルが悪いのでしょうか…
fopenはfileより低メモリでできると書いてあったのですが、この結果からだと間違っているようなのですがどうなのでしょう?
下記のコメントでいただいた情報を含めて回答します。
fopenは約19000ファイルで処理が止まり$d5の結果が表示されず、fileは約26000ファイルで$d5の結果も表示できました
これは、fopen関数の問題というより、whileループを回しているオーバーヘッドがあるために、file関数の場合より少ないファイル数でタイムアウトしてしまったのだと考えられます。
確証はありませんが、file関数を使った場合よりfile_get_contents関数を使った方が、少しだけ読み込み可能なファイル件数が増えるのではないでしょうか。
なるほどそっちですか…代わりの命令で上手い方法はないのでしょうか?
今回の例では確かにfileよりはfile_get_contentsがいいですね。