6

私は、数Kbから約50Mbの範囲のファイルを作成するシステムを構築していますが、この質問は他の何よりも好奇心から外れています。オンラインで答えが見つかりませんでした。

使用する場合

$handle=fopen($file,'w');

呼び出す前に保存されている$handleはどこにありますか

fclose($handle);

?システムのメモリに保存されていますか、それとも一時ファイルに保存されていますか?

次に、一度に1024バイトのデータを取得するループを使用してファイルを作成し、毎回次のようにデータを書き込みます。

fwrite($handle, $content);

その後、

fclose($handle);

ループが完了し、すべてのデータが書き込まれたとき。ただし、実行したループを使用する方が効率的またはメモリフレンドリーですか?

$handle = fopen($file, 'a');
fwrite($handle, $content);
fclose($handle);

4

3 に答える 3

8

PHPの用語では、fopen()(および他の多くの関数は)リソースを返します。に関連付け$handleられているファイルハンドルを参照するリソースも同様$fileです。

リソースはメモリ内オブジェクトであり、PHPによってファイルシステムに永続化されません。

現在の方法論は、2つのオプションの中でより効率的です。同じファイルを何度も開いたり、書き込んだり、閉じたりすることは、一度開いて何度も書き込んでから閉じるよりも効率が悪くなります。ファイルを開いたり閉じたりするには、入力バッファと出力バッファを設定し、他の内部リソースを割り当てる必要がありますが、これは比較的コストのかかる操作です。

于 2012-09-28T20:59:00.427 に答える
2

ファイルハンドルは単なる別のメモリ参照であり、他のプログラム変数やリソースと同じようにスタックメモリに格納されます。また、ファイルI / Oに関しては、一度開いて閉じ、必要な回数だけ書き込むことができます。これが最も効率的な方法です。

$handle = fopen($file, 'a'); //open once
while(condition){
  fwrite($handle, $content); //write many
}
fclose($handle); //close once
于 2012-09-28T20:58:55.000 に答える
0
  1. PHPによると、DOCS fopen()は。であるストリームを作成しますFile handle。ファイルシステム内のファイルに関連付けられています。

  2. File handleさらに1024バイトを書き込む必要があるたびに 新規を作成すると、非常に遅くなります。

于 2012-09-28T21:05:21.443 に答える