你知道从PHP致命错误恢复的任何解决方案:" 允许的内存大小......用尽 "
我有一个关闭函数,当出现致命错误时调用该函数.此函数从中创建ErrorException并记录它.
问题是:当没有更多可用内存时,它无法记录错误(我使用Zend Framework通过FirePHP登录Firebug).
所以我的意思是" 如何从中恢复 ",是如何执行基本错误日志,让Zend Framework发送标题,以便记录错误(在我的情况下在Firebug中),因为任何其他错误?
谢谢
此错误是致命错误 - 这意味着您无法从中恢复.如果PHP达到内存限制,它将无法再分配任何内存来创建异常以及执行所需的任何其他内存.
还有另一种类型的错误 - "可捕获的致命错误",顾名思义,可以在try/catch中捕获,但不幸的是,内存大小分配不是其中之一.
if((memory_get_usage() / 1024 /1024) < 70)
我只是将memory_get_usage除以1024平方,将其与'正常'兆字节值'70'进行比较.
我在for循环中遇到了内存问题,并编写了这个简单的if语句,以防止我的脚本引发致命错误.另外,我操作的服务器不允许我修改内存限制(在一些云产品中通常就是这种情况,例如openshift或像dreamhost这样的大型网络主机.)我没有注意到任何严重的性能下降(在php 5.3中,这可能会处理与php 4.x或5.x略有不同的函数......无论如何,给出致命错误的脚本的性能含义超过了函数调用可能强制的任何开销.并且还会阻止消耗所有可用内存的失败脚本.
许多人可能会争辩; 哦,嘿,你的软件没有优化.是.你也许是对的; 但是对于复杂的数据集,你只能在需要为它投入更多内存之前挤出这么多的性能; 并且追踪ajax流中的内存错误可能非常令人沮丧; 特别是当您不确定日志文件的位置时.
自定义错误处理的常规方法是通过
set_error_handler
—设置用户定义的错误处理函数
此功能状态的文档(重点是):
用户定义的函数无法处理以下错误类型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING以及在调用set_error_handler()的文件中引发的大多数E_STRICT。
因此,它无法正常运行,但是您可以尝试
PHP手册注释中给出的方法,使用输出缓冲或
使用的方法 register_shutdown_function
从PHP7开始,错误和异常是Throwables,因此您可以尝试/捕获它们:
http://php.net/manual/zh/language.errors.php7.php