在app.php中使用自定义env函数会导致内存无限增长

深林孤鹰

我看了 https://www.workerman.net/q/7564 并根据walkor大佬的建议,在 support/helper.php 中定义了:

function env($key, $default = null) {
    static $env_config = [];
    if (!$env_config) {
        $env_config = include config_path().'/.env';
    }
    return $env_config[$key]??$default;

}

来读取 .env 配置内容,其他的配置文件(比如 redis.php、database.php 使用都没问题,就是在 app.php 中使用:

return [
'debug' => env('debug', false),
。。。
];

时会导致内存无限增长,然后服务退出,请问如何解决呢?谢谢~

900 1 0
1个回答

walkor

发下报错,发全

  • 深林孤鹰 2022-08-18

    Active code page: 65001

    F:_Projects\ManagementPlatform\Server\webman>php windows.php

    VirtualAlloc() failed: [0x00000008] 内存资源不足,无法处理此命令。

    VirtualFree() failed: [0x000001e7] 试图访问无效的地址。

    VirtualAlloc() failed: [0x00000008] 内存资源不足,无法处理此命令。

    VirtualFree() failed: [0x000001e7] 试图访问无效的地址。

    PHP Fatal error: Out of memory (allocated 1849688064) (tried to allocate 8192 bytes) in F:_Projects\ManagementPlatform\Server\webman\envs.php on line 4

    Fatal error: Out of memory (allocated 1849688064) (tried to allocate 8192 bytes) in F:_Projects\ManagementPlatform\Server\webman\envs.php on line 4

    谢谢大神~

  • 深林孤鹰 2022-08-18

    php windows.php 后会停止10秒左右,内存一直往上飙,然后报错

  • 深林孤鹰 2022-08-18

    我测试了一下,如果在app.php中调用env()方法,会无限载入 app.php 配置文件,我把 include config_path().'/.env'; 改为 include_once 或 require_once后问题解决了,虽然不知为何。。哈哈

  • walkor 2022-08-18

    猜测是 .env php里引用了app.php的配置,导致无限循环引用了。

  • 深林孤鹰 2022-08-18

    谢谢大神, .env 里使用了 runtime_path() 函数,不过 app.php 只是返回一个数组(包含了 runtime_path 索引),这样也会循环调用么?不太明白。。。

  • walkor 2022-08-18

    runtime_path() 函数里会引用 app.php,所以循环引用了

年代过于久远,无法发表回答
🔝