小皮面板设置 PHP 上传大小和超时,核心就改 php.ini 里的四个参数:upload_max_filesize、post_max_size、max_execution_time、max_input_time,改完必须重启 PHP 才生效;如果是 Nginx 站点,还要同步调大 client_max_body_size,否则前面改得再大,上传也会被 413 直接挡掉。
小皮面板在哪里改 PHP 上传大小和超时?
结论:小皮面板(phpstudy)有两个入口,图形化「PHP 设置」和直接编辑 php.ini 文件,后者更可靠,多版本 PHP 时不会改错文件。
Windows 版路径是:软件管理 → 找到对应 PHP 版本(如 php7.4.3nts)→ 点「设置」→「配置文件」,浏览器会用记事本打开该版本的 php.ini;也可以直接在安装目录 phpstudy_pro/Extensions/php/php7.4.3nts/php.ini 找到它。Linux 版在网站 → 站点设置 → PHP 配置里编辑配置。图形界面的菜单位置在不同小版本间会有差异,但最终改的都是同一份 php.ini,找不到菜单就直接定位文件。
打开后搜索这几个参数,把注释符 ; 去掉并改成目标值:
upload_max_filesize = 64M
post_max_size = 66M
max_execution_time = 300
max_input_time = 300
memory_limit = 256M
max_file_uploads = 20
upload_max_filesize 是单个上传文件的上限;post_max_size 是整个 POST 请求体的上限;max_execution_time 是脚本最大执行秒数,默认 30;max_input_time 是解析请求数据的最长秒数,默认 60。改完在面板里停止再启动 PHP(只 reload 有时不刷新 ini),然后重新访问页面。
upload_max_filesize 和 post_max_size 为什么要一起改?
结论:post_max_size 必须大于 upload_max_filesize,否则表单提交时整个请求体先被截断,PHP 拿不到文件,表现为「上传后 $_FILES 为空」而不是报错。
经验配比是 post_max_size = upload_max_filesize + 2M,留出表单其他字段和 multipart 边界占用的空间。比如想传 64M 的包,就设 upload_max_filesize = 64M、post_max_size = 66M;两个都写 64M 时,实际能传成功的往往只有 63M 多。
另外 memory_limit 别忽略:图片处理、解压 zip 这类操作会在内存里展开文件,memory_limit 停留在默认 128M 时,大文件上传后处理阶段会直接 fatal error。传 64M 以上文件建议给到 256M。
改了 php.ini 为什么还是传不上去?
结论:Web 服务器层还有一道独立的请求体限制,和 PHP 完全无关,必须一起改。
Nginx 默认 client_max_body_size 1m,超过就返回 413 Request Entity Too Large。在小皮面板里进网站 → 站点设置 → 配置文件,在 server {} 段内加:
client_max_body_size 64m;
fastcgi_read_timeout 300s;
fastcgi_read_timeout 默认 60s,对应 PHP 的 max_execution_time,两边都要放大,否则长任务会在 60 秒被 Nginx 掐断,页面报 504。
Linux 版小皮用 php-fpm 跑 PHP,还要确认 php-fpm.conf 里的 request_terminate_timeout:如果它被设成 30s,PHP-FPM 会直接杀掉进程,max_execution_time 设 300 也没用,需要一并调整为 300 或 0(0 表示不限制,生产环境不建议)。
Apache 环境下对应的是 LimitRequestBody(默认 0 不限制)和 FcgidMaxRequestLen,一般不用动。
怎么验证参数真正生效?
结论:不要凭感觉,用 phpinfo() 或 ini_get() 打出来看,同时确认改的是当前站点实际使用的那个 PHP 版本。
在站点根目录建一个 check.php:
<?php
echo ini_get('upload_max_filesize'), "\n";
echo ini_get('post_max_size'), "\n";
echo ini_get('max_execution_time'), "\n";
浏览器访问它,对比与 php.ini 里写的值是否一致。Linux 服务器也可以命令行核对:php -i | grep -E 'upload_max_filesize|post_max_size|max_execution_time',但要注意 CLI 用的可能是另一份 ini,以网页输出为准。
有一个高频问题:小皮面板装了两三个 PHP 版本,站点绑定的是 7.2,你却改了 7.4 的 php.ini。先到网站 → 站点设置里确认「PHP 版本」,再改对应目录下的文件。
还有两个容易被忽略的坑
一是程序自身的限制。WordPress、Discuz、Typecho 这类程序有自己的上传上限和内存配置,比如 WordPress 的 WP_MEMORY_LIMIT、媒体库上限,PHP 放宽后仍要在程序配置里同步调整。
二是临时目录和磁盘。upload_tmp_dir 指向的分区剩余空间不足,会在上传完成后写入失败;max_file_uploads 默认 20,一次批量传超过 20 个文件时多余的会被静默丢弃。
总结一下操作顺序:定位站点对应 PHP 版本的 php.ini → 改 upload_max_filesize、post_max_size、max_execution_time、max_input_time、memory_limit → 同步调大 Nginx 的 client_max_body_size 和 fastcgi_read_timeout → 重启 PHP 与 Web 服务 → 用 ini_get() 验证。四步缺一步,都可能出现「改了没反应」。