PHP:超出 30 秒的最大执行时间

2022-08-31 00:20:29

我有一个php应用程序,它调用一个名为Customer的类。每隔一段时间,我就会得到一个超时错误。起初我以为它是SQL,但它指向类本身。

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

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

有谁知道这是怎么回事?

谢谢

比利


答案 1

PHP 脚本具有允许它们执行的最长时间,如 php.ini 中所述。

如果您真的想要,可以通过添加以下行来规避这种情况:

ini_set('max_execution_time', 123456);

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

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

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

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

如果您看到最终用户应该通过 Web 请求使用的内容出现此问题,则可能必须执行一些分析以找出真正原因。如果您正在执行MySQL查询,请首先打开慢速查询日志。它特别擅长让您知道何时忘记了索引,或者您是否正在做其他效率低下的事情。

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

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


答案 2

推荐