現在の位置: ホーム> 最新記事一覧> PHP set_file_bufferとfopen関数を組み合わせて、より効率的なファイル操作を実現するにはどうすればよいですか?

PHP set_file_bufferとfopen関数を組み合わせて、より効率的なファイル操作を実現するにはどうすればよいですか?

gitbox 2025-09-12
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// これは記事の内容とは関係ありません PHP コードの例</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"環境を初期化します...\n"</span></span><span>;
</span><span><span class="hljs-variable">$init_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$log_file</span></span><span> = </span><span><span class="hljs-string">"init.log"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$log_file</span></span><span>, </span><span><span class="hljs-string">"初期化が完了しました: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>, FILE_APPEND);
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1>結合する方法 PHP set_file_buffer そして fopen 関数,より効率的なファイル操作を実現します?</h1>

<p>存在する PHP 大きなファイルを処理するとき,文件的读取そして写入性能往往会成为瓶颈。ファイル操作の効率を改善するため,結合することができます <code>fopen

2。set_file_buffer関数の紹介

set_file_buffer関数は、ファイル操作のバッファサイズを設定するために使用されます。デフォルトでは、PHPにはファイル操作用のバッファリングメカニズムが組み込まれていますが、バッファサイズを手動で調整すると、大きなファイルを処理したり、頻繁に読み書きしたりすると、パフォーマンスが大幅に向上します。

 </span><span><span class="hljs-title function_ invoke__">stream_set_write_buffer</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-number">8192</span></span><span>); </span><span><span class="hljs-comment">// バッファーをに設定します 8KB</span></span><span>

バッファサイズを合理的に設定することにより、システム呼び出しの数を減らし、I/Oオーバーヘッドを減らし、ファイルの動作効率を改善することができます。

3。組み合わせの例を使用します

FOPEN使用してファイルを開く方法を示す完全な例を示します。

 </span><span><span class="hljs-comment">// 書き込みファイルを開く</span></span><span>
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"large_file.txt"</span></span><span>, </span><span><span class="hljs-string">"w"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$handle</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"ファイルを開くことができません"</span></span><span>);
}

</span><span><span class="hljs-comment">// バッファサイズをに設定します 16KB</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_set_write_buffer</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-number">16</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span>);

</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">100000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
    </span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-string">"これが最初です <span class="hljs-subst">$i</span></span></span><span> ラインデータ\n");
}

</span><span><span class="hljs-comment">// ファイルハンドルを閉じます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);

上記の例では、バッファーを16 kBに設定することにより、PHPはFWRITEが呼び出されるたびに実際のディスクを実行しませんが、最初にメモリにデータをキャッシュし、バッファーの上限に達したときにディスクに書き込み、ディスクI/O操作の数を大幅に削減できます。

4。実践的なアドバイス
  • バッファサイズはファイルサイズとサーバーメモリに従って調整する必要があります。通常、 8 kb〜64 kb妥当な範囲です。
  • 大きなファイルを書くときは、バッファリングメカニズムを使用して、頻繁なディスクの書き込みを避けてください。
  • 読み取り操作の場合、 stream_set_read_bufferを使用してバッファーを設定して読み取りパフォーマンスを向上させることもできます。
  • マルチスレッドまたは同時書き込みシナリオでは、バッファのデータの一貫性に注意を払う必要があります。

5。概要

FOPENSET_FILE_BUFFERを組み合わせると、PHPファイル操作の効率を大幅に改善できます。バッファサイズを適度に設定し、システムコールの数を減らすことにより、大きなファイルや高頻度の読み取りと書き込みを処理する際に、大幅なパフォーマンスの改善を実現できます。これらの手法を習得した後、PHPファイル処理機能はより効率的で安定します。