PHP 警告:XXXXXXX 字节的 POST 内容长度超出了第 0 行未知中 33554432 字节的限制

问题描述 投票:0回答:1

我面临一个问题,即我无法在 AWS Elastic Beanstalk 上部署的 PHP 应用程序上上传大于 ~32MB 的文件。我在 php-fpm/www-error.log 中看到的错误是:

PHP 警告:XXXXXXXX 字节的 POST 内容长度超出了第 0 行未知中 33554432 字节的限制

我尝试通过 SSH 连接到我的 EC2 实例来增加 /etc/php.ini 文件中的 upload_max_filesize 和 post_max_size 并进行以下更改:

sudo nano /etc/php.ini

我更新了以下值:

upload_max_filesize = 100M
post_max_size = 100M
memory_limit = 512M
max_execution_time = 300

重新启动 Nginx 和 PHP-FPM 服务后,我使用 phpinfo() 文件进行检查以查看更改是否已应用:

sudo nano /var/www/html/phpinfo.php

但是,当我访问phpinfo()时,我注意到post_max_size仍然设置为32M,并且错误仍然存在。

Elastic Beanstalk 似乎覆盖了 php.ini 设置,并且我不确定如何永久应用更改以允许上传更大的文件。有其他人遇到过这个问题或知道如何解决吗?

php file-upload amazon-elastic-beanstalk
1个回答
0
投票

我找到了解决方案,事实证明 Elastic Beanstalk 确实覆盖了 php.ini 设置。这是我为解决该问题所做的操作:

Elastic Beanstalk 可以通过环境配置或 .ebextensions 文件覆盖 PHP 设置。就我而言,即使我直接修改了 /etc/php.ini,post_max_size 也会被 Elastic Beanstalk 的配置重置。

要永久解决此问题,我必须在 .ebextensions 目录中创建一个配置文件,该文件在每次部署中应用我所需的 PHP 设置。

我遵循的步骤:

在我的项目文件夹中,我创建了一个新的配置文件(.ebextensions/php-settings.config)。

    files:
  "/etc/php.d/custom.ini":
    mode: "000644"
    owner: root
    group: root
    content: |
      upload_max_filesize = 100M
      post_max_size = 100M
      memory_limit = 512M
      max_execution_time = 300

我使用通常的部署流程将此更改部署到 Elastic Beanstalk。部署后,这些设置已正确应用,我通过再次检查 phpinfo() 文件确认了更改。

现在post_max_size和upload_max_filesize设置为100M,文件上传问题解决了。

不要忘记重新启动 Nginx 和 PHP-FPM 以使更改生效。

sudo systemctl restart nginx
sudo systemctl restart php-fpm

为什么这有效:

Elastic Beanstalk 有时会覆盖某些设置,尤其是与 PHP 配置相关的设置。通过创建 .ebextensions 文件,您可以确保您的配置正确部署并在所有环境中一致应用。

我希望这可以帮助其他面临同样问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.