我有一個使用cURL的php腳本,需要大約10-15分鐘才能執行。它的功能是,解析大約1000頁尋找特定匹配,並在整個腳本中回顯出診斷消息,如「進入下一頁」,「找到匹配項」,「錯誤加載頁面」...現在它的工作方式(以及它正常的方式)是它執行10分鐘,然後只吐出我所有的自定義消息。 我希望能夠在它們發生時顯示這些消息,而不是在腳本完成執行時顯示這些消息。我正在考慮像AJAX這樣做,但我不確定它會如何工作。任何提示,非常感謝。謝謝。php腳本仍在執行時回覆郵件
回答
所以,這是一箇舊帖子,但我找到了一個解決方案。因爲我也必須做出同樣的事情,所以當腳本仍在運行時輸出。沒有任何答案從這裏幫助。 首先,我使用Win32服務器(生產)和XAMPP作爲本地進行測試。這個例子只是一個概念證明,可以隨意修改。
<?php
ob_implicit_flush(true);
for($i=1; $i<=10; $i++){
echo "$i ...<br>";
for($k = 0; $k < 40000; $k++) echo ' ';
sleep(1);
}
?>
因此,我們打開輸出緩衝區爲隱式。然後我們製作一個演示循環,從1到10進行計數,並在處理值時顯示這些值。第二個循環將填充瀏覽器緩衝區。最後,檢查一切是否正常,我們睡1秒鐘。否則,劇本將運行得太快,我們不知道我們是否實現了目標。 希望這有助於!
通過刷新輸出緩衝區,使用flush
可立即將輸出發送到瀏覽器。
echo "foo";
flush();
echo "bar";
flush();
Flush不保證能在所有瀏覽器/平臺/配置下工作 – mrbinky3000 2011-01-12 14:34:52
您可以創建臨時表。
PHP腳本可以代替回顯消息,將它們存儲到數據庫表(可能用於性能的內存表)中。
然後,您可以使用ajax定期輪詢一個單獨的PHP腳本,該腳本將查詢該表並將任何新消息返回給客戶端。
同意。沖洗將無法100%的時間。 Ajax是必需的。 – mrbinky3000 2011-01-12 14:39:10
沒有推式解決方案(而不是輪詢)? – Richard 2014-11-23 21:49:35
基本上,您的腳本將HTML輸出寫入臨時日誌文件。然後使用ajax定期用臨時日誌文件更新最終用戶的瀏覽器。 jQuery將爲此做出快速的工作。
Ajax是讓它在所有瀏覽器上都能正常工作的唯一保證方式。這是來自PHP的同步頁面的引用。
的flush()可能無法覆蓋 您的Web服務器 的緩衝機制,而且它在瀏覽器中任何 客戶端緩存沒有影響。 它也不影響PHP的用戶空間 輸出緩衝機制。這意味着 如果您正在使用這些緩衝區,則必須調用ob_flush() 和flush()以刷新ob輸出 緩衝區。
聽起來像你有output buffering打開。
調用ob_end_flush()將打印當前緩衝區中的內容,並關閉緩衝區以執行其餘腳本。
您可以使用flush()函數將緩衝區的所有內容發送到客戶端。 http://php.net/manual/fr/function.flush.php
你可以同時使用flush
和ob_flush
,提醒設置內容類型標題:
<?php
header('Content-type: text/html; charset=utf-8');
for($i = 0 ; $i < 10 ; $i++){
echo $i . '<br>';
flush();
ob_flush();
sleep(1);
}
來源:dermeister注意在php.net ob_flush頁。
測試火狐42.0和Chrome 46.0
我使用@ob_flush()
每echo
後。在這個例子中PHP_EOL
創建後$string
function output($string){
echo $string.PHP_EOL;
@ob_flush();
}
- 1. 使用PHP執行腳本url回覆電子郵件使用PHP
- 2. PHP:當有人回覆郵件時,將回覆文本添加到郵件中
- 3. 只在脫機時執行php腳本
- 4. 在shell腳本中執行php腳本?
- 5. 在C執行PHP腳本
- 6. 執行php腳本
- 7. 執行PHP腳本
- 8. 有條件地執行PHP腳本來發送電子郵件
- 9. PHP郵件腳本
- 10. 郵件PHP腳本
- 11. 在執行php腳本時回顯一個php代碼到html文件
- 12. nginx - PHP腳本(PHP7)仍在下載,未執行
- 13. 發送回覆並繼續執行腳本 - PHP
- 14. 恢復包時,NuGet不執行腳本
- 15. JavaScript的執行PHP的郵件腳本不發送電子郵件
- 16. 腳本仍在執行時顯示結果
- 17. 腳本仍在執行時如何設置任何數據?
- 18. 電子郵件腳本 - 回覆郵件Gmail對話
- 19. 回聲shell腳本的執行時間
- 20. 執行PHP腳本時顯示結果
- 21. 從php執行python腳本時出錯
- 22. 更多時間來執行php腳本
- 23. Exim&WHM - 在郵件拒絕時運行PHP腳本
- 24. 在郵件到達IMAP服務器時運行PHP腳本
- 25. R - 重複執行腳本
- 26. 是否可以回覆PHP郵件讓服務器運行腳本?
- 27. 從Puppet運行的腳本回復郵件
- 28. 複選框檢查時執行php腳本
- 29. 執行PHP腳本和JS腳本
- 30. 在執行腳本文件時從gui對象返回數據
爲[這個問題的類似的一個新行(http://stackoverflow.com/questions/4481235/php-flush-ob-flush-not-working)。 – netcoder 2011-01-12 14:28:09
另一個簡單的例子是從命令行執行腳本,這樣你就可以實時獲得回顯。 – 2011-01-12 14:28:49