【发布时间】: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)我可以读取值:
memory_limit => 256M => 256Mpost_max_size => 16M => 16Mupload_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