for ($i=1; $i<=4; $i++) {
echo $i ;
}
sleep(2) ;
for ($i=5; $i<=10; $i++) {
echo $i ;
}
2秒待ってから5を10回印刷するよりも最初にプリントする1〜4が必要です。これはonline php editorで動作しますが、ウィンドウ(xampp)を試しているときに1から10を直接表示しています。なぜ出力がPHPの中間プロセスではなく実行前に待機するのですか?
for ($i=1; $i<=4; $i++) {
echo $i ;
}
sleep(2) ;
for ($i=5; $i<=10; $i++) {
echo $i ;
}
2秒待ってから5を10回印刷するよりも最初にプリントする1〜4が必要です。これはonline php editorで動作しますが、ウィンドウ(xampp)を試しているときに1から10を直接表示しています。なぜ出力がPHPの中間プロセスではなく実行前に待機するのですか?
オンラインPHP
はシェルのように動作していると思いますので、コードが実行されるときに出力を見ることができます。
Xampp仮想マシンでは、PHP
スクリプトが完全に実行されてからブラウザに配信されるまで待機しているため、sleep()
コマンドは何も実行していないように見えます。
スクリプトをコマンドラインインターフェイスで実行すると、期待どおりの内容が表示されます。
PHPコマンドラインとHTTPリクエストの違いを理解しておく必要があります。
phpコマンドラインを実行すると、現実的な出力が得られます。
your_root_folder$ php your_script.php
しかし、あなたは、Apacheは、スクリプト全体を完全に実行するために待っているHTTPリクエストによってPHPスクリプトを実行し、クライアントへの出力を提供します。あなたの質問を1として
http://localhost/your_script.php
、オンラインPHPエディタは彼らのPHPサーバーに自分の書いたコードを掲示され、あなたに出力を与える意志の完全な実行サーバーの後に自分のサーバーでコードを実行します。
あなたはすぐにブラウザに出力する必要がある場合、あなたはすなわちob_end_flush()とflush()、使用することができ、既に存在している答えに追加:
for ($i=1; $i<=4; $i++) {
echo $i ;
}
ob_end_flush();
flush();
sleep(2) ;
for ($i=5; $i<=10; $i++) {
echo $i ;
}
あなたはあなたのサーバーへの呼び出しを行うと、PHPスクリプトが実行されます これが完全に完了すると、結果はブラウザに返されます。
あなたは寝ることができます。
<?php
header('Content-type: text/html; charset=utf-8');
header("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
set_time_limit(0);
ob_implicit_flush(1);
for ($i=1; $i<=4; $i++) {
echo $i ;
}
for ($i = 0; $i < 2; $i++) {
sleep(2);
if(ob_get_level()>0)
ob_end_flush();
}
for ($i=5; $i<=10; $i++) {
echo $i ;
}
?>