2012-03-03 39 views
1

我有以下Web PHP代碼:友好的方式來呼應緩慢的加載數據

while ($row = mysql_fetch_array($results, MYSQL_NUM)) 
{ 
printf("<p>ID: %s</p>", $row[0]); 
echo exec ("php analysis.php " .escapeshellcmd($row[0])); 
} 

對於一組4K的用戶,下面的代碼需要15分鐘,其結果顯示在增量執行〜 1k用戶。

我希望結果以代碼運行的速度顯示,以便任何使用該頁面的人都對天氣或代碼工作感到困惑。有沒有辦法強制瀏覽器顯示發送的數據?

編輯: Flush沒有產生顯着不同的輸出。
編輯: 我的問題仍未解決?是否有一些可以在JavaScript中實現的客戶端服務器模型來實現這一點? Javascript可以打開套接字並中斷套接字數據?也許使用閃光燈(我知道可以使用插口...)

+0

爲什麼不把'analysis.php'中的所有內容都放到一個函數中,'include()'一次,然後在循環中調用函數?使用'exec'看起來有點矯枉過正(你應該使用['escapeshellarg'](http://php.net/escapeshellarg)來轉義參數,而不是'escapeshellcmd')。 – knittl 2012-03-03 22:58:49

回答

0

echo exec(...)在命令完成之前等待。如果您不介意顯示部分信息,請使用passthru(...)

根據您的網絡服務器,flush可能工作或不工作。如果啓用輸出緩衝(隱式使用ob_start()或在php.ini中明確指定),則還需要調用ob_flush()

0

也許你可以將它設置爲一個流和fread從它?結合flush

試圖從execsystem或的許多方法來調用命令行程序從PHP〜_〜一個讀輸出時,我一直運行到堅實的牆壁

0

嘗試使用沖洗的flush輸出緩衝:

while ($row = mysql_fetch_array($results, MYSQL_NUM)) 
{ 
    printf("<p>ID: %s</p>", $row[0]); 
    echo exec ("php analysis.php " .escapeshellcmd($row[0])); 
    flush(); 
} 

如果服務器使用輸出緩衝,使用ob_flush在腳本的開始調用ob_start之後。