我有一个网关脚本,它将JSON返回给客户端.在脚本中,我使用set_error_handler来捕获错误,并且仍然具有格式化的返回.
它受"允许的内存大小耗尽"错误的影响,但不是通过像ini_set('memory_limit','19T')之类的东西来增加内存限制,我只想返回用户应该尝试别的东西,因为它已经习惯了记忆.
有没有什么好方法可以捕获致命错误?
有没有办法使用unserialize内存/大小限制?
目前我们有:
$data = unserialize($_SESSION['visits']);
Run Code Online (Sandbox Code Playgroud)
我们偶尔会得到:
PHP Fatal error: Allowed memory size of 134217728 bytes in the Unknown on line 0 (尝试分配 17645568 字节)
当访问者在短时间内进行了大量访问时(会话值存储有关访问的每个页面的信息)。
如果 的长度$_SESSION['visits']超过一百万个字符,则会导致问题,因此我可以对此进行简单检查,但是否有比这更好的解决方案:
if(strlen($_SESSION['visits']) <= 1000000) {
$data = unserialize($_SESSION['visits']);
} else {
$data = array();
}
Run Code Online (Sandbox Code Playgroud)
我认为try catch可能表现得更好,但没有被抓住:
try{
$data = unserialize($_SESSION['vists']);
} catch(\Exception $exception){
error_log('Caught memory limit');
}
Run Code Online (Sandbox Code Playgroud)
这个问题的答案不是增加内存大小。