【问题标题】:PHP set_time_limit no effectPHP set_time_limit 无效
【发布时间】:2011-05-31 20:20:40
【问题描述】:

我有一个非常痛苦的慢脚本,它从 MySQL 获取大量数据并从中创建一个大型报告,它最终以应用程序/强制下载的形式提供给用户。

长话短说,在生产服务器上,它会在大约 30 秒后继续终止(相当一致)并吐出一个空文件。在开发服务器上它工作正常,但它确实需要更长的时间来执行 - 大约 90 秒。为了“安全”,我将我的 php.ini 文件设置为 max_execution_time = 2000 并在我的脚本开头运行 set_time_limit(4000) (数字远远超过预期的完成时间,但只是为了确定;))。

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

编辑:我肯定知道的一件事是,MySQL 部分代码需要 8-9 秒才能完成,并且每次都能成功通过。

【问题讨论】:

  • mysql端的时间限制怎么办?并在 php.ini 中用于 mysql 功能?
  • 同时检查您的内存限制。您可能正在耗尽您的最大内存。
  • 您的错误日志是否启用?如果是这样,他们会给我们一个线索,让我们知道发生了什么,日志说什么?
  • 检查 phpinfo() 输出以查看 max_execution_time 的“本地”设置。 PHP 可以有多个 .ini 文件(用于命令行和基于 Web 的执行),您可能修改了错误的文件。
  • 内存限制默认为512MB,我只是设置为-1。

标签: php apache timeout


【解决方案1】:

也许是 PHP 安全模式。

尝试做一个

die(ini_get('max_execution_time'))

在调用set_time_limit(0); 后读取该值,看看它是否真的被覆盖了。

如果它被覆盖为 0 并且您的脚本仍然死掉,那么原因可能在您的代码中的其他地方

【讨论】:

  • 你的意思可能是max_execution_time php.net/info.configuration#ini.max-execution-time 编辑:我的意思是safe_mode :X php.net/ini.sect.safe-mode#ini.safe-mode
  • 安全模式似乎已关闭。 memory_limit 已成功设置为 -1。
  • @salty:抱歉,我的意思当然是 max_execution_time。 +1 @king 进行更正
  • die() 技巧表明 max_execution_time 已成功更改为更大的数字。
  • @salty:那么你的脚本不是因为时间限制而死,而是因为代码中的某处还有一些其他错误
猜你喜欢
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2012-09-20
  • 2017-02-17
  • 1970-01-01
  • 2017-12-24
  • 2018-01-21
相关资源
最近更新 更多