我面临一个问题,即我无法在 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 设置,并且我不确定如何永久应用更改以允许上传更大的文件。有其他人遇到过这个问题或知道如何解决吗?
我找到了解决方案,事实证明 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 文件,您可以确保您的配置正确部署并在所有环境中一致应用。
我希望这可以帮助其他面临同样问题的人。