[PHP-dev 541] Re: implicit_flush=On/Off problem

Yasuo Ohgaki php-dev@php.gr.jp
Sun, 27 Oct 2002 11:46:27 +0900


大垣です。

# 適当に読み流してください m(_ _)m

Youichi Iwakiri wrote:
> 岩切です。
> 
> Yasuo Ohgaki wrote in <3DB7D0D3.1010309@ohgaki.net> :
> 
>># implicit_flush=Onが良いと思っている方には申
>># し訳ないですが、徹底的にやります ;)
> 
> 
> Yasuo Ohgaki wrote in <cvsyohgaki1035336100@cvsserver> :
> 
>> Modified files:              
>>   /php4/sapi/cli	php_cli.c 
>> Log:
>> Make CLI behave like other moder scripting languages.
> 
> 
>>-		zend_alter_ini_entry("implicit_flush", 15, "1", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
> 
> 
> には、賛成なんですけどね。
> 動作のカスタマイズが出来ると言う点で、可用性を高めますから。
> 
> 今問題になっていることは、
> 1. run-tests.phpがimplicit_flush=Onに依存している
> 2. 大多数のユーザ(誰それ?)が、インタラクティブな出力を
>    期待しているため、標準的なphp.iniを読み込んだ場合、implicit_flush=Off
>    となってしまい戸惑う可能性が非常に高い。

現在のrun-tests.phpでflush()が必要なのは、QAチームに
テスト結果を送信する?のプロンプトだけです。

ここだけ、flush()が必要なので他のフラッシュは全て無駄と
いう事になります。

PEARインストーラもflush()数行書くのが面倒ならini設定をス
クリプトから変えればOKです。

> 3. 一般的なスクリプト系の言語は、行単位でflushしている

もともと言語として設計された言語で自動フラッシュしている言語
は知りません :) 自動フラッシュは意味不明なので他の言語開発者
の皆さんもそんな仕様にしていないのだと思います。

> 
> と言ったところでしょうか?
> 
> 個人的には、強制的にimplicit_flsush=Onで無く、且つ従来通りの
> 動作を保証するために、cli用のphp-cli.iniを用意すれば
> 済みそうなんですけど、php.iniはあくまでcli版とそれ以外でも
> 共用する事を前提にしているように見えるんですが?

# Web用のiniファイルを使ってもあまり意味がないので、
# 全く別のiniファイルにする、と言うのもよい方法ですね。
# 他に習って/etc/phprcとか??? ~/.phprcとか???

普通にインストールすると以下の順番でINI設定が有効になります。
# 他にもあるかも、あ、PHPRC環境変数!でも優先度を知りません。

-D オプションのini設定
-c オプションのiniファイル
php.ini
php.ini-{SAPI_name}

と、いう事は普通のユーザーはphp.iniの設定がCLIにも有効と
普通は考えます。implicit_flush=Onは普通のプログラムでは
99%無用なのでCLI SAPIで強制的に変更するのはおかしいと
考えています。ほとんどがバッチ処理では?プロンプトが必要な
場合でも4行関数を作ればよいだけですし。

強制的に非効率モード(=implicit_flush=ON)になる、と言うの
は、私にはどうしても理解不能です。

本当は出力バッファがフィルターのように利用できるようになっている
方が便利なので今までと同様にimplicit_flushはデバッグ用にとって
おきたい、という事もあります。 # php-devでは書いてませんが.

implicit_flush=Onの設定にはたたきドコロがおおすぎで、
デフォルト設定にするべきではない事は明らかと思っています。
# お互い意地ですね。多分 ^^;

大元は、非常に非効率な方法で書いているvar_exportとか
hilight_string関数が私の出力バッファのフラッシュの修正で
前と違う動作をして、私の出力バッファの修正が間違っていると決
めつけているので、理解できないのでしょう。

# 最後の方の理由は矛盾だらけでもう理由になってませんでした :(

# var_export, hilight_stringはsprintfを使うベキです。

ob_implicit_flushのマニュアルの記述をみると解るとと思い
ますが、あれは出力バッファの暗黙的フラッシュとは言えません。
しかも、あの方法だとクラッシュ/出力が壊れるので、私がずいぶん
前にバッファを削除しないように変えて役立づです。

> もちっと、静観しておきます。

静観してください ^^;
面倒な事に巻き込むつもりは全くありません :)

# 他の方からもプライベートメールでは、私の意見に賛成と
# いってくださる方もぼちぼちいます。

そろそろ、最初からオトシドコロと考えていた 「implicit_flush=On
じゃなくてoutput_buffering=Offじゃないの?」と言う線でま
とまる?!のでは、思っています。

--
Yasuo Ohgaki