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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了如何在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代码.如果您不想这样做,那么您应该真正进行扩展.

脚本宝典总结

以上是脚本宝典为你收集整理的如何在PHP中使用内存使用警告?全部内容,希望文章能够帮你解决如何在PHP中使用内存使用警告?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。