2010-10-29 100 views
14

我有一個叫做客戶端的類的PHP應用程序。每隔一段時間,我都會遇到某種超時錯誤。我原以爲它是SQL,但它將它指向類本身。PHP:超過30秒的最大執行時間

Fatal error: Maximum execution time of 30 seconds exceeded in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\Connections.php on line 3

<?php 
    session_start(); 
    class Connections { //line 3 

有誰知道這是怎麼回事?

感謝,

比利

+2

請發佈您的完整代碼,可能會這樣做。此外,您還可以用'的ini_set( '的max_execution_time',14000)延長腳本時;' – Sarfraz 2010-10-29 10:53:34

回答

40

PHP腳本有他們允許執行的,如在php.ini中聲明的最大時間。

可以通過添加以下行規避這一點,如果你真的想:

ini_set('max_execution_time', 123456); 

其中123456是你想要的極限是多少秒。

您也可以使用set_time_limit功能,這是我剛剛發現了約,並承擔做同樣的事情。我一直只是做了前者。

您可以在php.ini文件中更改它,但您可能正在使用腳本來執行批處理操作或其他操作。你不希望一個終端用戶訪問的PHP腳本在那裏掛起30秒或更長時間,所以你最好將它保留在默認狀態,或者甚至在php.ini文件中將它關閉,並根據需要設置max_execution_time。

正如在下面的評論中指出的那樣,您可以將max_execution_time設置爲0來阻止錯誤的發生,但seengee說得對,至少對於web請求來說,您確實不應該這樣做。對於php命令行解釋器,這種行爲是默認的。

如果您發現應該由最終用戶通過網絡請求使用的問題,您可能需要進行一些分析以找出真正的原因。如果您正在進行MySQL查詢,請打開slow query log。當你忘記索引時,或者如果你做了其他效率低下的事時,它尤其擅長讓你知道。

你也可以推動一些$s = microtime(true); yourstuff(); var_dump(microtime(true)-$s);的東西來得到一個模糊的概述,哪些位正在放慢速度,只是確保你沒有留下任何事後!

如果你還在苦苦尋找根源,設置xdebug你的本地計算機上並運行探查。該擴展可用作預編譯的Windows二進制文件(儘管似乎有一些令人困惑的版本)。您可以使用wincachegrind檢查運行分析器的結果。

+13

'的ini_set( 「的max_execution_time」,0)'意味着沒有最大值(未盡管決定) – robjmills 2010-10-29 10:54:52

+0

嗨,你能回答[這](HTTP ://stackoverflow.com/questions/28457538/sql-trigger-after-insert-update-another-table-with-conditions),謝謝 – stom 2015-02-11 21:31:58

相關問題