2011-05-31 90 views
2

我有一个非常痛苦的慢脚本,它从MySQL获取大量数据,并创建一个大型报告,它在最后以应用程序/强制下载的形式提供给用户。长话短说,在生产服务器上,它在大约30秒(相当一致)之后保持终止,并且将空文件转出。在开发服务器上它工作正常,但执行时间明显更长 - 大约90秒。为了'安全',我将我的php.ini文件设置为max_execution_time = 2000,并在脚本的开始处运行set_time_limit(4000)(数字超过预期的完成时间,但只是为了确定;))。PHP set_time_limit没有影响

什么可能导致我的网络服务器忽略我设置的时间限制,并在30秒后退出?

编辑:我确切知道的一件事是,它需要8-9秒的MySQL部分完成,并且它每次都成功通过该点。

+0

怎么样上的MySQL侧的时间限制?并在php.ini中的mysql功能? – Fosco 2011-05-31 20:22:23

+0

检查您的内存限制。你可能会耗尽你的最大记忆。 – 2011-05-31 20:23:06

+0

检查'phpinfo()'输出以查看max_execution_time的“本地”设置。 PHP可以有多个.ini文件(用于命令行和基于Web的执行),并且可能修改了错误的文件。 – 2011-05-31 20:29:15

回答

7

也许PHP safe_mode。

尝试做一个

die(ini_get('max_execution_time')) 

读值你叫set_time_limit(0);后,看是否真正得到它overwrited。

如果它被overwrited为0,你的剧本还是会死那么原因可能是别的地方在你的代码

+1

您可能的意思是'max_execution_time' http://php.net/info.configuration#ini.max-execution-time编辑:我的意思是'safe_mode':X http://php.net/ini.sect.safe-mode #ini.safe-mode – KingCrunch 2011-05-31 20:24:04

+0

safe_mode似乎关闭。 memory_limit已成功设置为-1。 – SaltyNuts 2011-05-31 20:29:49

+0

@salty:对不起,我的意思是max_execution_time。 +1 @ @king更正 – dynamic 2011-05-31 20:30:26