2013-05-25 64 views
0

我想問問,如果有人知道一種方式,我可以延遲一個php腳本,而無需一直佔用連接插槽。我並沒有完全意識到這一點,但我被告知,Apache有一個連接限制或腳本的限制在同一時間運行,我不能完全回憶,我的腳本需要運行約1至3小時,它實際上並沒有做任何重要的事情,它實際上睡眠時間爲90%。延遲php腳本沒有佔用連接

+2

如果」重新更新與PHP腳本的東西,要麼運行它的服務器端(沒有瀏覽器,只是命令行),或告訴PHP腳本只是運行和退出(客戶端顯示空白屏幕,可以C失去他們的瀏覽器)。 'header('Connection:Close');'。 –

+0

這就是我一直在尋找的東西!謝謝! –

+0

[早期關閉連接]的可能重複(http://stackoverflow.com/questions/138374/close-a-connection-early) –

回答

1

如果您正在運行腳本並且不期待任何響應,則可以使用php "dir/to/php/script.php"在服務器計算機的終端中運行它。

如果腳本的初始化發生在遠程,那麼您可以讓腳本退出,以便腳本繼續運行,但不會保持連接處於活動狀態。 header('Connection: Close');

例子:

<?php 

echo "The server is now doing some complex actions in the background..."; //even maybe a redirect instead 
header('Connection: Close'); 
file_put_contents(file_get_contents("largest_file_in_the_world.txt"),"/tmp/test.txt"); 

?> 
+0

這正是我一直在尋找的東西!謝謝!我只是還有一個與此有關的問題。如果我決定我需要停止腳本有沒有辦法,我可以做到這一點,而無需重新啓動Apache? –

+1

我建議讓'script.php'調用一個在後臺運行的bash文件。這樣,你可以稍後殺死bash文件而不是殺死apache。例如:'exec('nohup script.sh')' - >'php'script.php''。 –

+0

謝謝!我會對bash文件做一些額外的研究^^ –

1

此外,剛剛發送的連接:密切頭是不夠的,這裏是如何連接被關閉:

ignore_user_abort(true); 
header("Connection: close", true); 
header("Content-Length: 0", true); 
ob_end_flush(); 
flush(); 
fastcgi_finish_request(); 

Source