我有一个调用名为Client的类的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
有谁知道这里发生了什么?
感谢,
比利
答案 0 :(得分:42)
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来阻止错误发生,但是对于一个网络请求,你们真的不应该这样说。对于php命令行解释器,这种行为是默认行为。
如果您发现 应该由最终用户通过Web请求使用的内容存在此问题,您可能需要进行一些分析以找出真正的原因。如果您正在进行MySQL查询,请先打开slow query log。当你忘记索引时,或者你做其他事情效率低下时,它会特别擅长让你知道。
您还可以推送一些$s = microtime(true); yourstuff(); var_dump(microtime(true)-$s);
项内容来模糊地了解哪些内容正在减慢速度,只需确保您之后不留下任何内容!
如果您仍在努力寻找根本原因,请在本地计算机上设置xdebug并运行探查器。该扩展可用作预编译的Windows二进制文件(尽管似乎有一个令人困惑的版本数组)。您可以使用wincachegrind检查运行探查器的结果。