相关疑难解决方法(0)

在PHP中安全地捕获"允许的内存大小耗尽"错误

我有一个网关脚本,它将JSON返回给客户端.在脚本中,我使用set_error_handler来捕获错误,并且仍然具有格式化的返回.

它受"允许的内存大小耗尽"错误的影响,但不是通过像ini_set('memory_limit','19T')之类的东西来增加内存限制,我只想返回用户应该尝试别的东西,因为它已经习惯了记忆.

有没有什么好方法可以捕获致命错误?

php memory

64
推荐指数
4
解决办法
3万
查看次数

使用内存/大小约束反序列化

有没有办法使用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)

这个问题的答案不是增加内存大小。

php memory serialization

5
推荐指数
1
解决办法
439
查看次数

标签 统计

memory ×2

php ×2

serialization ×1