【问题标题】:PHP: Maximum execution time of 30 seconds exceededPHP:超过 30 秒的最大执行时间
【发布时间】:2011-05-02 08:30:54
【问题描述】:

我有一个调用客户端类的 php 应用程序。每隔一段时间,我就会遇到一种超时错误。起初我以为是 SQL,但它把它指向了类本身。

致命错误:第 3 行的 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\Connections.php 中的最大执行时间超过 30 秒

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

有人知道这里发生了什么吗?

谢谢,

比利

【问题讨论】:

  • 请发布您可能完成的完整代码。此外,您可以使用ini_set('max_execution_time', 14000); 延长脚本时间

标签: php class


【解决方案1】:

PHP 脚本有一个允许执行的最长时间,如 php.ini 中所声明的那样。

如果您确实需要,可以通过添加以下行来规避此问题:

ini_set('max_execution_time', 123456);

其中 123456 是您希望限制的秒数。

您也可以使用set_time_limit 函数,我刚刚发现并假设它做同样的事情。不过,我一直只做前者。

您可以在 php.ini 文件中更改它,但您可能正在使用您的脚本来执行批处理操作或其他操作。您不希望最终用户正在访问的 PHP 脚本在那里挂起 30 秒或更长时间,因此您最好将其保留为默认值,甚至在 php.ini 文件中将其关闭,并根据需要设置 max_execution_time。

正如 seegee 在下面的评论中指出的那样,您可以将 max_execution_time 设置为 0 以阻止错误的发生,但是 seegee 正确地说,至少对于 Web 请求,您真的不应该这样做。对于 php 命令行解释器,这种行为是默认行为。

如果您发现最终用户应该通过网络请求使用的东西出现此问题,您可能需要进行一些分析以找出真正的原因。如果您正在执行 MySQL 查询,请首先打开 slow query log。当您忘记了索引,或者您正在做其他效率低下的事情时,它特别擅长让您知道。

您还可以推一些$s = microtime(true); yourstuff(); var_dump(microtime(true)-$s); 的东西,以模糊了解哪些位正在减慢速度,只要确保之后不要留下任何东西!

如果您仍在努力寻找根本原因,请在本地计算机上设置 xdebug 并运行分析器。该扩展可作为预编译的 Windows 二进制文件使用(尽管似乎存在一系列令人困惑的版本)。您可以使用wincachegrind 检查运行分析器的结果。

【讨论】:

  • ini_set("max_execution_time", 0) 表示没有最大值(虽然不建议)
猜你喜欢
  • 2013-04-01
  • 2019-04-07
  • 2018-08-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多