2017-02-09 55 views
0

作爲標題,我有一個腳本有一些功能,當我運行該文件(在web服務器上)時,它會等待所有功能完成後一次顯示所有結果到屏幕上。 我只想運行一個函數並顯示其結果,然後執行下一個函數。例如:PHP如何運行和顯示函數序列,而不是等待所有完成,然後顯示1次

<?php 
function Fun1(){ 
echo 'Done 1st func'; 
sleep(3); //This is run time of Func1 
} 
function Fun2(){ 
echo 'Done 2nd func'; 
sleep(3); //This is run time of Func2 
} 
function Fun3(){ 
echo 'Done 3rd func'; 
} 
?> 

接着導致將被首先顯示爲:

完成第一FUNC

FUNC1的3S加載時後,另一行中加入:

完成第二func

FUNC2

的3S加載時後

完成第三FUNC

不是這樣的(6S等待時間後):

完成已完成第一次FUNC
第二功能
完成第三FUNC

在此先感謝:)

回答

2

如果您要在命令行或Web服務器上運行腳本,則沒有指定。但是由於在CLI中運行它已經產生了輸出,所以我會假設你將會使用它與Apache。

爲了在發生輸出時立即顯示輸出,您需要清除PHP的輸出緩衝區並立即刷新輸出。

下面是一個例子:

<?php 
while(ob_get_level()) ob_end_clean(); 
ob_implicit_flush(true); 

function Fun1(){ 
    echo 'Done 1st func'; 
    sleep(3); //This is run time of Func1 
} 
function Fun2(){ 
    echo 'Done 2nd func'; 
    sleep(3); //This is run time of Func2 
} 
function Fun3(){ 
    echo 'Done 3rd func'; 
} 
?> 

注:只要PHP安裝爲Apache模塊這將工作。你可以在phpinfo();中檢查。如果將它安裝爲CGI Handler或FastCGI,那麼您也必須禁用這些輸出緩衝區。

+0

我在Nginx的網絡服務器上運行它,並通過瀏覽器輸出:(看起來它不適用於Nginx。 –

+0

你可能需要搜索如何在nginx上做到這一點,這可能是值得檢查的:http:/ /image/gif/paws/3707/how-to-disable-output-buffering-in-nginx-for-php-application – Ibrahim

+0

嗨@lbrahim你知道如何限制每個循環可以運行的時間?例如:'code '$ i = 0; while(1){sleep($ i); $ i ++},如果一個輪次運行超過5秒,那麼將其分解並繼續循環... –

相關問題