2011-09-15 27 views
0

我試圖通知用戶,(另一個)腳本在後臺運行的狀態(每分鐘運行一次)。無法在while()循環中打印php ajax

所以我有這樣的PHP代碼:

 
    while(@fopen("dl.conf","r")){ 
     print "Download will start soon"; 
     flush(); 
     sleep(1); 
    } 
    . 
    .

它不顯示任何信息,再加上即使我取消該文件也不會執行該腳本的其餘部分。

基本上用戶可以提交文件進行下載。這會觸發創建文件dl.conf。有一個腳本運行在後臺檢查是否存在dl.conf,如果是這樣,它會讀取它並開始下載。它也會刪除dl.conf文件。

用戶提交下載可能會發生,但該腳本需要幾秒鐘才能再次運行,並意識到需要下載某些內容。所以我只是希望用戶等待下載,這將很快開始(然後顯示下載進度)。

謝謝

+0

有解析錯誤的碼。 – Rijk

+2

有沒有解析錯誤,我只是跑這個代碼,並沒有顯示錯誤 – danishgoel

+0

怪異我沒有得到任何解析錯誤。你能告訴我錯誤是什麼嗎? – Danny

回答

0

你並不需要使用fopen()檢查,如果文件是存在的,你可以簡單地使用file_exists()這樣。

// run loop till file exists 
while(file_exists("dl.conf")){ 
    print "Download will start soon"; 
    flush(); 
    sleep(1); 

    // clear stat cache to get correct file status 
    clearstatcache(); 
} 

你不需要clearstatcache()函數調用,如果後臺腳本也是一個PHP腳本,並使用unlink()刪除dl.conf文件。正如unlink()自動清除文件統計高速緩存。

更新

有時沖洗()或單獨使用ob_flush不起作用。看看這個對PHP文檔的評論http://php.net/manual/en/function.ob-flush.php#90529

所以如果你確實使用了output_buffering,你可以試試這組命令。

ob_end_flush(); 
ob_flush(); 
flush(); 
ob_start(); 
+0

對不起,但我這樣得到相同的行爲。沒有打印。我不能使用unlink(),因爲這個php腳本不負責刪除dl.conf。它不知道何時刪除它 – Danny

+0

如果你沒有輸出,這意味着'file_exists()'返回false。在while循環之前嘗試'var_dump(file_exists(「dl.conf」))來檢查返回值是什麼。 – danishgoel

+0

我試過了,沒有任何改變。 :( – Danny

0

那麼你是阻止錯誤。

試試這個:

$fOpen = @fopen("dl.conf","r"); 

if(!$fOpen) die('ERROR of some kind...'); 

while($fOpen){ 
    print "Download will start soon"; 
    flush(); 
    sleep(1); 
} 
+0

我很抱歉,但我得到了這種相同的行爲。沒有打印。 – Danny

+0

@丹尼 - 你有php錯誤和錯誤日誌打開? – Neal

+0

是的,我剛剛檢查,我有display_errors和log_errors ON。 error_reporting = E_ALL | E_STRICT – Danny

0

你最好使用AJAX這種情況下,改變這種 腳本應在阿賈克斯處理onresponse事件

if(file_exists('dl.conf')) 
{ 
return 'file created, download will start soon'; 
} 
+0

它實際上在阿賈克斯處理我忘了提及它。該代碼是顯示進度條的腳本的一部分。無論如何,我需要一個循環或一些不會讓腳本繼續下去的東西,否則它會替換我用其他東西寫的任何消息。 – Danny

+0

響應將被緩衝,並且在腳本仍在運行時不會被髮送到輸出,您可以嘗試在php.ini中使用ob_flush()函數或相關配置選項來玩,但我認爲它不是選項 – Dmitry

+0

也可能這個問題可以有幫助http://stackoverflow.com/questions/6385676/php-buffered-output-depending-on-server-setting – Dmitry