我創建了一個腳本,它從一些Web服務和我們的數據庫獲取數據,格式化報告,然後將其壓縮並使其可供下載。當我第一次開始時,我使用命令行腳本來查看輸出,並避開在瀏覽器中查看時的腳本超時限制。但是因爲我不希望我的用戶必須從命令行使用它,或者必須在他們的計算機上運行php,所以我想從我們的web服務器運行該代碼。需要從瀏覽器運行一個長的PHP腳本
因爲這個腳本可能需要幾分鐘才能運行,所以我需要一種方法讓它在後臺處理,然後在文件成功創建後開始下載。在不觸發超時的情況下讓腳本運行的最佳方式是什麼?我曾嘗試過(使用反引號單獨運行腳本等),但放棄了,所以我在這裏問。理想情況下,用戶可以單擊表單上的提交按鈕來啓動請求,然後返回到頁面而不是讓他們盯着空白的瀏覽器窗口。當它們存在的zip文件(意味着進程已經完成)時,它應該通知它們(通過AJAX?重新加載的頁面?我還不知道)。
這是在Windows Server 2007上。
set_time_limit(0); ignore_user_abort(真); header('Location:'。$ _ SERVER ['SCRIPT_NAME']); - 這不應該在理論上起作用嗎?它似乎仍然在等待頁面。這裏的想法是讓腳本運行,但發送用戶回到上一頁,以便在文件存在時由ajax通知。 – Chris 2010-09-23 17:11:41
克里斯我假設可以工作,但它也會在高負載下殺死你的服務器! – Alfred 2010-09-23 18:34:26
好的,我現在已經把它變成了一個工作表。使用set_time_limit(0)和ajax請求,它會在後臺運行。 – Chris 2010-09-23 19:22:03