2012-08-17 131 views
21

我的PHP文件出現問題,需要超過30秒才能執行。php timeout - set_time_limit(0); - 不工作

搜索後,我在代碼的開始處添加了set_time_limit(0);,但是在30秒後文件仍然超時,出現500 error

log: PHP Fatal error: Maximum execution time of 30 seconds exceeded in /xxx/xx/xxx.php 

safe-mode : off 
+4

你在共享主辦? PHP的功能可以有選擇地禁用/限制服務器配置。 – 2012-08-17 04:17:23

+1

你能回聲ini_get('max_execution_time');'在你的'set_time_limit(0);'之後'並且告訴你得到了什麼? – Prasanth 2012-08-17 04:20:30

+0

在httpd.conf中可能有'php_admin_value max_execution_time XX'。所以你不能覆蓋這個值。 – verybadbug 2013-10-01 23:49:35

回答

21

檢查的php.ini

ini_set('max_execution_time', 300); //300 seconds = 5 minutes 

ini_set('max_execution_time', 0); //0=NOLIMIT 
+3

也明白,正如Marc B.所說,共享主機上可能存在限制,所以如果這些功能不能正常工作,請詢問服務器的某個管理員 – 2012-08-17 04:20:55

+0

@Marc B不,我在專用服務器 – user614963 2012-08-17 04:29:06

+1

@goldenparrot echo ini_get('max_execution_time'); = 0 – user614963 2012-08-17 04:29:36

2
ini_set('max_execution_time', 300); 

使用本

1

結帳這一點,這是PHP MANUAL,這可能會幫助你。

如果您使用PHP_CLI SAPI並且出現錯誤「超出N秒的最大執行時間」(其中N是整數值),請嘗試每M秒或每次迭代調用set_time_limit(0)。例如:

<?php 

require_once('db.php'); 

$stmt = $db->query($sql); 

while ($row = $stmt->fetchRow()) { 
    set_time_limit(0); 
    // your code here 
} 

?> 
+0

等等......什麼?沒有?'set_time_limit()':A)在每次調用時重置定時器(好,我看你要去哪裏)。 B)設置爲0時不設時間限制。 所以...不... – Mike 2014-04-11 21:27:26

+0

這應該被標記爲正確的答案。很有可能你會使用循環,並且set_time_limit(0)命令應該位於導致超時的循環的頂部。參數0意味着沒有時間限制(按照手冊),因此腳本可以運行直到完成。但是,如果您的腳本運行時間超過30秒,您可能希望重新考慮自己如何做事? – kurdtpage 2016-02-15 02:36:11

3

我通常使用主循環內參數或者set_time_limit(30)(使得每次循環迭代被限制爲30秒,而不是整個腳本)。

我在多個數據庫更新腳本中執行此操作,通常需要幾分鐘才能完成,但每次迭代只需不到一秒鐘 - 保持30秒的限制意味着腳本不會陷入無限循環,如果我很愚蠢足以創造一個。

我必須承認,我選擇30秒的限制是有些隨意的 - 我的腳本實際上可以用2秒的時間消失,但​​是考慮到實際應用,我感覺更舒適30秒 - 當然,您可以使用任何你覺得適合的價值。

希望這會有所幫助!

5

這是一個古老的線程,但我想我會發布這個link,因爲它在這個問題上幫了我很多。本質上,它所說的是服務器配置可以覆蓋php配置。從文章:

例如mod_fastcgi有一個選項,稱爲「-idle-timeout」,它控制腳本的空閒時間。因此,如果腳本在很多秒內不向fastcgi處理程序輸出任何內容,那麼fastcgi會終止它。該設置是有點像這樣:

Apache <-> mod_fastcgi <-> php processes 

文章還有其他的例子和進一步的解釋。希望這可以幫助別人。