我有一个php应用程序,它调用一个名为Client的类.每隔一段时间我就会有一段时间错误.我认为它最初是SQL,但它转向指向类本身.
致命错误:第3行的C:\ Program Files(x86)\ Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\Connections.php超出了30秒的最大执行时间
<?php
session_start();
class Connections { //line 3
Run Code Online (Sandbox Code Playgroud)
有谁知道这里发生了什么?
谢谢,
比利
Sha*_*obe 43
PHP脚本有一个允许执行的最长时间,如php.ini中所声明的那样.
如果你真的想通过添加以下行,你可以绕过这个:
ini_set('max_execution_time', 123456);
Run Code Online (Sandbox Code Playgroud)
其中123456是您希望限制的秒数.
你也可以使用set_time_limit函数,我刚刚发现它并假设做同样的事情.我总是只做完前者.
您可以在php.ini文件中更改它,但您可能正在使用脚本执行批处理操作或其他操作.您不希望最终用户访问的PHP脚本在那里停留30秒或更长时间,因此您最好将其保留为默认值,甚至在php.ini文件中将其关闭,并根据需要设置max_execution_time.
正如在下面的评论中指出的那样,你可以将max_execution_time设置为0来阻止错误的发生,但是对于一个网络请求来说,至少对于一个网页请求来说,你是不是应该这样做.对于php命令行解释器,此行为是默认行为.
如果您在最终用户通过Web请求使用的内容中看到此问题,则可能需要进行一些分析以找出真正的原因.如果您正在进行MySQL查询,请首先打开慢速查询日志.当你忘记一个索引,或者你正在做其他低效的事情时,它会特别擅长让你知道.
你也可以推一些$s = microtime(true); yourstuff(); var_dump(microtime(true)-$s);东西来模糊地了解哪些部分减慢了速度,只是确保你之后不要留下任何东西!
如果您仍在努力寻找根本原因,请在本地计算机上设置xdebug并运行探查器.该扩展可用作预编译的Windows二进制文件(尽管似乎有一个令人困惑的版本数组).您可以使用wincachegrind检查运行探查器的结果.