2013-02-18 80 views
0

我在PHP中使用睡眠()函數的很長一段時間時遇到一個問題,如果我測試下面的代碼都運行完美:PHP睡眠()函數殺害腳本一段時間後

<?php 

set_time_limit(0); 

$i = 0; 

while($i < 10) { 

    echo $i.'<br />'; 

    if($i == 5){   
     echo 'sleeping 5 secs<br />'; 
     sleep(5); 
     echo 'waking up<br />'; 
    } 

    $i++; 
} 

?> 

*****OUTPUT**** 

0 
1 
2 
3 
4 
5 
sleeping 5 secs 
waking up 
6 
7 
8 
9 

*****OUTPUT**** 

它睡5秒,之後的「喚醒」相呼應沒有問題,但是,如果我提出的秒腳本睡覺讓說,15分鐘的輸出量如下:

*****OUTPUT**** 

0 
1 
2 
3 
4 
5 
sleeping 900 secs //(15 mins) 

*****OUTPUT**** 

腳本在睡覺15分鐘後似乎被殺死了,這是什麼原因造成的?請注意,我使用set_time_limit(0)將max_execution_time標誌設置爲無限。在腳本的頂部。

我會感謝任何幫助,謝謝!

+4

我很好奇,你爲什麼要睡15分鐘的腳本? – Shoe 2013-02-18 16:08:04

+0

是的,同樣的問題 – vikingmaster 2013-02-18 16:09:49

+1

這是基於CLI還是瀏覽器? – Pitchinnate 2013-02-18 16:18:23

回答

1

即使是網絡服務器(Apache,IIS,...)也有一個超時設置,試着檢查你的許多默認300秒)。

另外要小心set_time_limit。在手冊中:'PHP在安全模式下運行時,此功能無效。除了關閉安全模式或更改php.ini中的時間限制外,沒有任何解決方法。

1

從PHP手冊:

當被調用時,set_time_limit()函數重新開始從零超時計數器。 換句話說,如果超時時間爲腳本執行的默認30秒和25秒鐘,則諸如set_time_limit(20)的調用爲 ,腳本將在超時之前運行總共45秒。不建議

set_time_limit(900); 

set_time_limit(0);,因爲您的Web服務器可能會強加一個HTTP超時通常是約5分鐘:

嘗試。