【问题标题】:PHP Allowed memory size exhausted in Laravel/InterventionLaravel / Intervention中PHP允许的内存大小耗尽
【发布时间】:2018-08-04 11:48:42
【问题描述】:

我有一个将图像上传到我的 API Laravel 项目的网页。 在我上传大小大于或等于 2mb 的图像之前,它一直有效,它在 nginx 500 错误中运行:

2018/02/24 15:57:50 [error] 3420#3420: *19 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/project-folder/vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php on line 136
PHP message: PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 73728 bytes) in /var/www/project-folder/vendor/composer/ClassLoader.php on line 444" while reading response header from upstream, client: *IP*, server: api.website.com, request: "POST /api/v1/posts HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.0-fpm.sock:", host: "api.website.com"

我在堆栈溢出和谷歌中读到了大量相同的问题,但似乎没有任何效果。

仔细阅读错误消息,我可以理解,从我的 PHP 配置来看,网站可以占用 134217728 字节 内存,但尝试分配 73728 字节 失败:这有什么意义吗? 它仅在允许的最大 128mb 的 0.7mb 内存上失败!

另一个奇怪的事情是从我加载的 php.ini 文件(运行 php -i | grep 'php.ini' 我收到消息 Loaded Configuration File => /etc/php/7.0/cli/php.ini)我可以读取值:

  1. memory_limit => 256M => 256M
  2. post_max_size => 16M => 16M
  3. upload_max_filesize => 16M => 16M

我已经尝试重新启动 php-fm,重新启动服务器,将 ini_set('memory_limit','256M'); 放在我的 php 类中的干预代码之前,但没有任何反应。

为什么会这样? 如果我的 php 配置中有 256M/16MB,为什么要 128MB/0.7MB?

谢谢

【问题讨论】:

  • 命令行使用的 PHP 二进制文件(可能)与 Nginx 使用的不同。确保在 Nginx 中也有正确的设置(您的答案中的设置适用于 CLI 版本)
  • 该消息表示它已经分配了 128MB,因此无法再分配 0.7MB。这意味着您的 256MB 限制无效

标签: php laravel nginx upload intervention


【解决方案1】:

你应该编辑这个文件

/etc/php/7.0/fpm/php.ini

并尝试从该 ini 文件中分配内存

摘自here

一般来说,cli/php.ini 文件在 PHP 二进制文件时使用 从命令行调用。您可以检查正在运行的 php --ini 从命令行。

fpm/php.ini 将在 PHP 作为 FPM 运行时使用 - 就是这种情况 使用 nginx 安装。你可以检查一下调用phpinfo() 来自您的网络服务器提供的 php 页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多