PHP技巧学习之如何修改文件上传的限制

在进行PHP的开发过程中,对于文件的上传,总是会遇到“上传文件过大”的错误。本文将从应用层到PaaS层讲解如何进行修改。本文中的代码是基于PHP Yii2框架PHP-FPMNginx服务器,修改的限制为100M。对于Apache服务器相关的内容,会提及修改的方案,但具体的代码则请参考Nginx的。

PaaS

首先,遇到这样的问题,总是先想到是PHP的配置有问题,所以就会想到要修改配置。当然,这样的思路也是正确的。而且出问题的也往往是PHP的配置文件中的upload_max_filesizepost_max_size这两个参数。所以我们就先修改php.ini文件。

  1. 修改php.ini 最大文件上传限制到100MB。
  • 编辑php.ini文件
vim /etc/php5/fpm/php.ini
  • 修改upload_max_filesizepost_max_size两个参数
upload_max_filesize = 100M
post_max_size = 100M
  1. 修改Nginx的配置:将如下的代码添加nginx配置文件的http{…}块中
http {
        #...
        client_max_body_size 100m;
        #...
}
  1. 重启 PHP-FPM & Nginx 服务,是的修改生效
service php5-fpm reload
service nginx reload

当然,如果是Apache服务器,则在完成上述步骤1后,即可通过重启Apache服务器使得修改生效。但是很多时候,我们的网站是托管在第三方平台的。这时,我们可能就没有针对php.ini文件的修改权限,也没有对nginx配置文件的修改权限。那这时该如何处理呢?

如果是Apache服务器,我们可以通过在网站的根目录下修改.htaccess文件(若没有,则创建一个)来实现。在.htaccess文件的<IfModule mod_rewrite.c></IfModule>的块中添加如下的代码:

php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value max_execution_time 300
php_value max_input_time 1000

应用层

但如果是nginx服务器,则无法使用上面介绍的方案了。这时,我们可以考虑通过在应用中来修改。PHP也提供了ini_set方法来修改PHP的配置。添加如下的代码在应用的入口文件中。Yii2下则添加在@yii/web/index.php的文件中。

ini_set('upload_max_filesize', '100M');
ini_set('post_max_size', '100M');
ini_set('max_execution_time', 300);
ini_set('max_input_time', 1000);

解决方案都是为特定场景下提供的,只有合适的,并没有最优的。这里提供的也是如此。如有不准确的,烦请各位读者指正。

发表评论

电子邮件地址不会被公开。 必填项已用*标注