2016-05-06 10 views
4

は奇妙な何か、私はこの希望出力けれどもページだし、すべてが(プロセスがどのように機能するかWordpressの更新/再インストールと同様に)ロードされるまで、一部で一部を示しています。いつPHPがページを一度に出力しないのですか?ここ

<html> 
<body> 
<?php 
for($i=0; $i<100; $i++) 
{ 
    echo 'HELLO'; 
} 
sleep(10); 
echo '<p></p>'; 

for($i=0; $i<100; $i++) 
{ 
    echo 'THERE'; 
} 
sleep(10); 
echo '<p></p>'; 

for($i=0; $i<100; $i++) 
{ 
    echo 'HOW '; 
} 
sleep(10); 
echo '<p></p>'; 


for($i=0; $i<100; $i++) 
{ 
    echo 'ARE U'; 
} 
sleep(10); 
echo '<p></p>'; 

奇妙なことに、それはページ全体を待ち、次にそれを示します。どのような変数や設定がこの動作に影響しますか?

答えて

6

PHPの仕組みは分かっていませんが、サーバー側のみであり、クライアント側で部分的な更新が予想されます。 PHPはそのようには動作しません。

phpインタプリタは、出力を一時的な場所に置いてからsleep関数を実行すると、ミリ秒に達するまで待ってから実行を続け、一時的な場所に出力を連結します、そして続行します...すべてのスクリプト実行が完了した後、PHPはクライアントに出力全体を送ります。

ページの一部を更新する必要がある場合は、非同期呼び出しとajaxの世界を入力する必要があります。

5

出力をバッファし、ページのロードが完了するかafaik、数キロバイトがバッファされた後にのみ出力します。この機能を制御するには、ob_start()ob_end_flush()のコードを完全にラップするか、この場合はすべてのスリープの前にflush()を呼び出してください。

さらに詳しい情報:What is output buffering?

1

PHPはサーバー側です。あなたはjavascriptのsetTimeout()関数でこれを試しましたか?

ここでは、5秒の遅延の後に10回繰り返される文字列の例を示します。

<script> 
setTimeout(test, 5000); 

function test(){ 
    for (var i=0;i<10;i++){ 
    document.write("test <br />"); 
    } 
} 
</script> 
+0

これは、ページ全体が一度に印刷される理由について私が解決しようとしている問題には関係ありません。 – NoBugs

+0

phpはサーバー側です。つまり、一度にサーバーに送信され、処理された後、結果が返されます。このような動的な何かを行うことは可能なjavascriptでしょう。 – Felix

+0

スコアが3000を超えると、OPはPHPが何であるかを理解していると思います。彼らはこの言語の90%を占める変わったことを学んでいるだけです。 – Anonymous

関連する問題