php文件上传大小限制可通过五种方法实现:一、修改php.ini中的upload_max_filesize、post_max_size和memory_limit并重启服务器;二、用.htaccess设置php_value(仅apache);三、用ini_set()动态设置(当前请求有效);四、php代码校验$_files'file';五、nginx配置client_max_body_size。

如果在PHP项目中上传文件时遇到文件过大导致失败的情况,通常是因为服务器端对上传文件的大小设置了默认限制。以下是实现PHP文件上传大小限制的多种方法:
一、修改php.ini配置文件
该方法通过调整PHP核心配置参数,全局控制上传文件的最大允许尺寸,适用于拥有服务器管理权限的场景。
1、找到服务器上的php.ini文件,路径通常为/etc/php/8.1/apache2/php.ini(Linux Apache)或C:\xampp\php\php.ini(Windows XAMPP)。
2、定位并修改以下三个参数值,确保它们协同一致:
立即学习“PHP免费学习笔记(深入)”;
3、将upload_max_filesize设置为所需上限,例如upload_max_filesize = 10M。
4、将post_max_size设为不小于upload_max_filesize的值,例如post_max_size = 12M(需大于upload_max_filesize以容纳POST头及其他字段)。
5、确认memory_limit足够支持文件处理过程,例如memory_limit = 256M(至少应大于post_max_size)。
6、保存php.ini文件后,重启Web服务器(如Apache或Nginx)使配置生效。
二、使用.htaccess临时覆盖(仅限Apache)
当无法直接编辑php.ini但具备.htaccess写入权限时,可通过此方式对特定目录下的PHP脚本单独设置上传限制。
1、在网站根目录或目标上传目录下创建或编辑.htaccess文件。
2、添加以下指令行(注意:仅对Apache + mod_php有效,不适用于PHP-FPM):
3、写入php_value upload_max_filesize 8M。
4、写入php_value post_max_size 10M。
5、保存文件,无需重启服务,规则立即对当前目录生效。
三、运行时动态设置(ini_set)
该方法在PHP脚本执行初期通过代码调用ini_set函数修改配置,仅对当前请求生命周期有效,适合多租户或动态策略场景。
1、在处理文件上传逻辑的PHP文件开头添加如下语句:
2、执行ini_set('upload_max_filesize', '5M')。
3、执行ini_set('post_max_size', '6M')。
4、注意:该方式在safe_mode开启或某些SAPI(如CGI)下可能被禁用,且不能超过php.ini中设定的硬性上限。
四、PHP代码层校验(客户端不可依赖)
即使服务端已设限,仍需在接收文件前进行显式大小判断,防止绕过配置或获取更友好的错误提示。
1、检查$_FILES数组中对应文件项的'size'键值,单位为字节。
2、使用条件语句比对,例如if ($_FILES['file']['size'] > 2 * 1024 * 1024) { /* 超过2MB */ }。
3、若超出预设阈值,调用move_uploaded_file()前终止流程,并返回自定义错误信息。
4、该检查必须放在is_uploaded_file()验证之后,确保文件确实已上传至临时目录。
五、Nginx服务器级限制(配合PHP-FPM)
当使用Nginx作为反向代理时,其自身也对客户端请求体大小有限制,若未同步调整会导致连接被提前拒绝,PHP层根本无法介入。
1、编辑Nginx主配置文件或站点server块配置,如/etc/nginx/nginx.conf或/etc/nginx/sites-enabled/default。
2、在http、server或location上下文中添加:client_max_body_size 15M;。
3、确保该值不小于PHP的post_max_size,否则请求会在到达PHP-FPM前被Nginx拦截并返回413 Request Entity Too Large。
4、执行nginx -t && nginx -s reload验证语法并重载配置。











