[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 メーリングリストの案内