php - 你能在它杀死脚本之前捕获超出分配的内存错误吗?

标签 php memory error-handling try-catch allocation

问题是我想在内存问题发生之前发现它们。我有一个从数据库获取行并将返回的关联数组转换为变量的系统,但我永远不知道数据库结果的大小是多少,或者一旦发出数据库请求将占用多少内存。这意味着我的软件可能会因为超出内存而失败。

但我想以某种方式避免这种情况。其中一种方法显然是使数据库请求更小,但如果这是不可能的,或者如果我不知道从数据库返回的数据大小怎么办?是否有可能“捕捉”在 PHP 中超出内存使用的情况?像这样的东西:

$requestOk=memory_test(function(){
    return doSomething();
});
if($requestOk){
    // Memory seems fine
    // $requestOk now has the value from memory_test() function
} else {
    // Function would have exceeded memory
}

我只是发现我的脚本可能会因为内存问题而随时死亡,这是有问题的。据我所知,这里不能使用 try-catch,因为这是一个 fatal error 。

任何帮助,将不胜感激!

最佳答案

您可以将函数 memory_get_usage 放在循环中,并检查每次循环迭代时是否接近内存限制。

关于php - 你能在它杀死脚本之前捕获超出分配的内存错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12391764/

相关文章:

php - 允许使用@进行错误抑制的功能

javascript - 使用 PHP/AJAX 将数据插入 MySQL 数据库,插入后执行成功选项(回调)

sql-server - "There is insufficient system memory in resource pool ' 执行存储过程时默认' to run this query"

c++ - 为什么此代码会出现段错误

php - PDO 没有正确执行绑定(bind)变量

php - 将个人资料图片上传一次(不是两次)到数据库中,并正确显示它们

c - 结构内的指针重新分配正常,但指向结构内指针的指针无法重新分配,并出现无效指针错误

Node.js 错误回调

angular - Angular 6。 httpClient中错误处理的正确方法

java - 我的Java版本是最新版本,但我的JVM仍然是1.5?