如何处理PHP中的致命错误


How do I handle Fatal Error in PHP?

我正在通过HTML表单通过CSV文件插入一个巨大的数据值。

我使用set_time_limit(0);,以便脚本运行直到整个操作不执行。

致命错误:最大执行时间超过300秒C:'xampp'htdocs'clytics'include'clytics.database.php on line 135

现在,我正在尝试捕获这个致命错误

我已经使用set_time_limit(0);所以这个脚本一直运行到未执行操作

可能也需要更多内存。基本上,你的代码就像一头肥猪。你需要驯服它吞噬资源的方式。

但这只是你可能面临的整体架构问题的一个切线。

具体到这个问题,你的代码中是否有一些东西会覆盖set_time_limit(0);的值?

另外,您是通过命令行还是通过Apache中的PHP运行此脚本?因为php.ini的CLI配置与php.ini的Apache模块配置完全不同。

例如,在Ubuntu上Apache PHP php.ini在这里:

/etc/php5/apache2/php.ini

但是命令行(CLI) php.ini在这里:

/etc/php5/cli/php.ini

如果你想让你的脚本不考虑你的配置设置而消耗内存,你可以把这个添加到你的PHP文件的顶部:

ini_set('MAX_EXECUTION_TIME', -1);

如果有人读到更多关于set_time_limit的内容,就会出现:

设置脚本允许运行的秒数。如果这是到达后,脚本返回一个致命错误。默认限制为30方法中定义的max_execution_time值. ini。

然后阅读max_execution_time这个出现了:

设置允许脚本运行的最长时间(以秒为单位)在被解析器终止之前。这有助于预防从绑定服务器编写脚本。默认值为30。当从命令行运行PHP时,默认设置为0。

然后,神奇的300数字出现了:

您的web服务器可以有其他超时配置,也可能中断PHP的执行。Apache有一个Timeout指令,IIS有一个CGI超时功能。都默认为300秒。查看web服务器具体细节的文档。

现在你知道300是从哪里来的了。但是执行ini_set('MAX_EXECUTION_TIME', -1);应该可以让您在没有超时的情况下运行脚本。

如果这些都不起作用,最后一点信息:查看max_input_time:

设置允许脚本解析的最大时间(以秒为单位)输入数据,如POST和GET。计时从PHP诞生的那一刻开始在服务器端调用,并在执行开始时结束。

虽然max_input_time似乎不相关,但在某些版本的PHP中,max_input_timemax_execution_time直接连接存在一个错误。