プロが教えるわが家の防犯対策術!

標準入力を受け付けるプログラムの動作がおかしいのですが、原因を教えてください。
単体でインストールしたphp5.5では正常に動作します。
windows7
xampp_portableのphp5.4

c:\xampp\php
実行結果
a
Input->:Print->a

c:\php
実行結果
Input->:a
Print->a

ソース
<?php
$str;
print "Input->:";
$str = trim(fgets(STDIN));
print "Print->$str\n";
?>

以上、どなたかお願いいたします。
phpの勉強を始めたばかりなので、初歩的な質問に
なっているかもしれません。

A 回答 (1件)

php.iniのoutput_buffering設定に影響されているようですね。

「バッファリング」といって、echoした後もすぐには出力せずに、ある程度溜めておいてまとめて表示させる手法です。実際にApacheを利用してWebサイトを公開する場合にはバッファリングを使用したほうが好都合なことが多いのですが、コマンドラインの場合には完全に要らない子ですね。局所的に無効にしたい場合は

<?php
while (ob_get_level()) ob_end_clean();
print "Input->:";
$str = trim(fgets(STDIN));
print "Print->$str\n";

こんな感じでどうでしょうか。なお、終了タグ「?>」は書かなくてもいいには過ぎず、書かない方がいいと推奨されています。マニュアルにそう書かれています。
    • good
    • 0
この回答へのお礼

ありがとうございました。この問題が解決できず2日ほどかかりつけでした。
教えていただいたプログラムで実行ができました。
Apatcheを利用するまではバッファリングを無効にしておくため

php.iniの
output_handler = mb_output_handler

output_buffering = 4096
をコメントアウトしました。(他に影響がないといいのですが・・・不安)

また、終了タグについてもご指摘ありがとうございました。
感謝いたします。

お礼日時:2014/04/08 23:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!