Dead Zone

Stand alone.

php-cliのコンソール出力

2013-07-02 09:24:56 | 雑記

元ネタはPDT Forumなんですが。
何かしら出力〜何かしら入力〜何かしら出力という流れのPHPスクリプトをPDTで実行すると、Consoleビューに何も出力されないまま入力状態になって何か入力すると前段の出力と後段の出力がいっきに表示されると。

php.iniにoutput_handlerの指定があるとそういう現象が発生します。
再現コード
<php
function getInput($msg) {
    fwrite(STDOUT, "$msg: ");
    $varin = trim(fgets(STDIN));
    return $varin;
}

echo "Here we go!\n";
$s = getInput("Enter text");
echo "Here it comes!\n";
?>
期待される結果
Here we go!
Enter text:
Here it comes!
実際の結果
Enter text:
Here we go!
Here it comes!

対処法は...
1) php.iniでoutput_handlerを指定しない(ま、普通はそれじゃ困るんだろうけど、本当に困るかどうかは利用者次第だし)(専用php.iniをこさえて-cオプションで指定するというやり方もあるし)
2) スクリプトの中で
ob_end_clean();(もしくはob_end_flush())
ob_implicit_flush(true);
を記述
3) スクリプトの中で必要な箇所に
ob_flush();
flush();
を記述
4) スクリプトの中でechoやprintを使わず全てfwrite(STDOUT,〜)で処理する
5) Consoleビューを使わない(terminalなりcommand promptなりを開く)
6) Eclipseを使わない

なんか現実的じゃないなぁとは思いつつ。やり方はいくらでもあるだろうし、その中で自分に適したものを選べばいいじゃないかと。

ジャンル:
ソフトウェア
コメント (0) |  トラックバック (0) |  この記事についてブログを書く
この記事をはてなブックマークに追加 mixiチェック
« XdebugでBreakpointが(ry | トップ | え゛(無駄話) »

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
  • 30日以上前の記事に対するトラックバックは受け取らないよう設定されております。
  • 送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております。
  • このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております。
  • ※ブログ管理者のみ、編集画面で設定の変更が可能です。