stream_set_write_buffer() を実行しても効果がない
PHPのfgetcsvやfputcsvでファイルを扱う時の排他処理(donkのPHP日記)を読んで、昔 stream_set_write_buffer() について調べていたのを思い出しました。
stream_set_write_buffer() は、「指定されたストリームのファイルバッファリングを有効にする」という関数なのですが、いくつかのサイトでは、ファイルの書き込み時に、この関数を使用して書き込みバッファを 0 にすることが推奨されています。
ただ、PHP 4.3.2 以降から、fopen() で得られたリソースに対して stream_set_write_buffer() を実行しても、-1 (EOF)を返します(成功時には、0 を返します。PHP: stream_set_write_buffer - Manual)。
Windows 版と Linux でコンパイルした PHP 5.2.9 や PHP 5.3.0 RC2 で確認してみましたが、修正されていませんでした。このため、現状の stream_set_write_buffer() は実行しても意味がない関数だと思われます。
参考 URI:
- [PHP-users 14986]Re: PHP4.3.2RC2のstream_set_write_buffer(set_file_buffer)が失敗する
- [PHP-users 14984]Re: PHP4.3.2RC2のstream_set_write_buffer(set_file_buffer)が失敗する
スクリプト例:
<?php $fp = fopen( "test.txt", "w" ); var_dump( stream_set_write_buffer( $fp, 0 ) );
結果:
int(-1)