加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何在PHP中使用内存使用警告?

发布时间:2020-12-13 22:53:01 所属栏目:PHP教程 来源:网络整理
导读:在 PHP中,当脚本消耗的内存超过memory_limit时,脚本将停止并显示错误.如何添加警告级别:如果我的脚本消耗超过90Mb,我在日志文件中有警告,但脚本继续运行,如果消耗超过128Mb仍然崩溃? 我对PHP扩展或PHP C代码一无所知,但只要我们已经自己构建PHP,我们甚至可
在 PHP中,当脚本消耗的内存超过memory_limit时,脚本将停止并显示错误.如何添加警告级别:如果我的脚本消耗超过90Mb,我在日志文件中有警告,但脚本继续运行,如果消耗超过128Mb仍然崩溃?

我对PHP扩展或PHP C代码一无所知,但只要我们已经自己构建PHP,我们甚至可以修补代码.

在Zend / zend_alloc.c中,我可以看到这一点

if (segment_size < true_size || heap->real_size + segment_size > heap->limit) {

在此之前添加一行并将已使用的内存与另一个限制进行比较并发出警告非常容易.

我可以在扩展中修补,还是修补PHP代码?为什么这不存在?这是一个坏主意?这已经存在于某个地方吗?

为MAX_EXECUTION_TIME添加相同的警告似乎更难,因为我仍然不理解计时器的处理方式.

解决方法

以下是我找到的一些有趣的问题/文章:

> This code shows a PHP way to catch a fatal error.
> Safely catch a ‘Allowed memory size exhausted’ error in PHP

基本上,当脚本退出或停止时,您可以使用PHP register_shutdown_function来运行函数.而函数error_get_last()返回有关最后一个错误的信息,这将是致命的错误:

ini_set('display_errors',false);

error_reporting(-1);

set_error_handler(function($code,$string,$file,$line){
        throw new ErrorException($string,null,$code,$line);
    });

register_shutdown_function(function(){
        $error = error_get_last();
        if(null !== $error)
        {
            echo 'Caught at shutdown';
        }
    });

try
{
    while(true)
    {
        $data .= str_repeat('#',PHP_INT_MAX);
    }
}
catch(Exception $exception)
{
    echo 'Caught in try/catch';
}

我不建议您只编辑PHP C代码.如果您不想这样做,那么您应该真正进行扩展.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读