2016-04-19 10 views
0

私はonUbuntu 14.04で、PHP 5.5.9を使用しています。今あるように私は、スクリプトを実行する場合は出力を印刷するまで「exec」コマンドを実行しないのはなぜですか?

<?php 

$a = exec('clear'); 
print($a); 

は私が手::

$ php a.php 
<screen cleared> # nothing is displayed in the screen 
       # "clear" was performed successfully 

しかし、私はちょうどこのようなファイルを持っているprint($a)コメント場合があり、私は非常に単純なファイルa.phpを持っています:

<?php 

$a = exec('clear'); 

はその後何も起こりません:

$ php a.php 
$    # nothing happened, I see the previous line above 

私の理解では、変数$aを呼び出すことによって、clearが実行されます。外部プログラムを実行

print()が呼び出されるまでclearが行われない理由はあります -

幹部を:exec() docsが言うので、しかし、それは、あまり意味がないのですか?

これは質問Clear CMD-shell with phpに関連していますが、私はここで質問していますなぜこれが発生します。

+1

downvoteの理由を説明してください。私はその質問に興味のある人にもっと洞察を与えることができて嬉しく思います。 – fedorqui

+0

私は、正確に何を意味したかったかを表現するために質問に言い直しました:*どうしてきれいにしないのですか?* – fedorqui

答えて

2

実際には、execを呼び出すとclearが実行されます。実際に出力するまでは、画面上にアクションが表示されません。

+0

「クリア」のアクションは画面をクリアすることです。 'print'が起こる? – fedorqui

+1

クリアは、単に2つのエスケープシーケンスを出力します。あなたの場合、出力は$ aに入ります。それを印刷して送信するまで、端末はクリアされません。 –

+0

@fedorqui、コンソールで 'clear | od -t x1'となる。 Adrianが言うように、* NIXシステムでは、コンソールは制御コードによって制御されます。 (例えば、Linuxの 'man console_codes'を参照してください)。 'clear'が実行されるコンピュータは、コンソールがどこにあるのと同じである必要はありません。そして、それは本当のコンソールである必要はありません。コンソールコードは、アプリケーションがどこにあっても実装されているかにかかわらず、コンソールを制御するためのプロトコルを形成します。 – Dummy00001

関連する問題