php - 如何在 PHP 中发出内存使用警告?

标签 php memory

在 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 添加相同的警告似乎更加困难,因为我仍然不了解计时器的处理方式。

最佳答案

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

  1. This code shows a PHP way to catch a fatal error .
  2. Safely catch a 'Allowed memory size exhausted' error in PHP

基本上,您可以使用 PHP register_shutdown_function 在脚本退出或停止时运行函数。函数 error_get_last() 返回有关最后一个错误的信息,这可能是 fatal error :

ini_set('display_errors', false);

error_reporting(-1);

set_error_handler(function($code, $string, $file, $line){
        throw new ErrorException($string, null, $code, $file, $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 - 如何在 PHP 中发出内存使用警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24635637/

相关文章:

PHP快速解密方法

ios - 解决迁移大量数据的内存问题

c++ - 指向 char* 值的指针中的问题

Java Neo4J 内存不足

java.lang.out of memory 错误 Android Bitmap Factory

php - 如何在 PHP 中更新图像?

php - 在内存中创建 SQLite 数据库

php - 安排 php 脚本在特定日期仅在 Openshift 中运行一次

php - 合并两个数组,将重叠的结果相加

ios - 对__bridge,_bridge_retain和_bridge_transfer的疑问