[PHP-users 14972]PHP 4.3.2RC2のstream_set_write_buffer(set_file_buffer)が失敗する
komura
komura @ ma9.seikyou.ne.jp
2003年 4月 30日 (水) 19:11:33 JST
komura です。
PHP 4.3.2RC2 が公開されましたので、簡単なテストしていたのですが、
stream_set_write_buffer (set_file_buffer) が失敗します。
PHP マニュアルによると、関数が成功した場合、0 が返ってくることになって
いますが、PHP 4.3.2RC2 で下にあるスクリプトを実行すると返り値と
して -1 が返ってきます。
http://jp.php.net/manual/en/function.stream-set-write-buffer.php
PHP 4.3.0 で確認したところでは、問題はありませんでした。
こちらのスクリプトや環境などで、何か問題や勘違いをしているようで
したら、指摘してください。
$ cat test.php
<?php
$fp=fopen('test.txt', 'w');
if ($fp) {
// set_file_buffer でも同様
$ret = stream_set_write_buffer($fp, 0);
if ($ret == 0) {
fwrite($fp, 'test');
fclose($fp);
}
else {
echo "error : $ret\n";
}
}
?>
$ php -v
PHP 4.3.2-RC2 (cli) (built: Apr 29 2003 11:51:59)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies
$ php test.php
error : -1
環境:
RedHat Linux 7.3
./configure
--enable-inline-optimization
--with-zlib
--with-apxs=/usr/local/apache/bin/apxs
--with-pgsql
--without-mysql
--enable-mbstring
--enable-mbregex
--with-cli
--with-gd
一応、ソースを確認したところ、 main/streams.c の以下の部分で -1 を
返しているようなのですが、C 言語にはあまり詳しくないのでこれ以上は
分かりません。
1629: case PHP_STREAM_OPTION_WRITE_BUFFER:
1630: if (data->file == NULL) {
1631: return -1;
1632: }
この部分で処理が終わってしまうので、この後にあるバッファ操作関数
の setvbuf が実行されないため、バッファサイズは変更されていないと
思います。
# set_file_buffer で返り値を取得するような PHP スクリプトをあまり
# 見かけないのはエラーを検出できても対処に困るからなのでしょうか。
--
komura <komura @ ma9.seikyou.ne.jp>
PHP-users メーリングリストの案内