You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache2+PHP大文件上传失败:出现caught SIGWINCH日志及上传错误码1

Apache2+PHP大文件上传失败:出现caught SIGWINCH日志及上传错误码1

看起来你碰到的是大文件上传里很常见的配置遗漏问题,结合错误码1和Apache日志里的SIGWINCH信息,咱们一步步来解决:

先搞懂错误码1到底是什么意思

你看到的Error in file upload: 1对应的是PHP的UPLOAD_ERR_INI_SIZE常量——说白了就是你上传的文件大小超过了php.ini里upload_max_filesize的限制。你已经设置了post_max_size=20G,但这个参数管的是整个POST请求的总大小(包括文件和其他表单数据),而upload_max_filesize是单独限制单个上传文件的大小,而且它的值必须小于等于post_max_size才行。

补全PHP里的关键配置

打开你的/etc/php/8.1/apache2/php.ini,检查并修改这几个参数:

  • upload_max_filesize = 20G (和post_max_size保持一致,确保能装下3.4G的文件)
  • max_execution_time = 300 (上传大文件肯定需要更长时间,默认60秒大概率不够,改成5分钟以上都没问题)
  • max_input_time = 300 这个是限制PHP处理输入数据的时间,同样得调大
  • memory_limit = 512M (避免上传过程中内存不够用,根据你的服务器配置来,至少得比单文件大小的一半多)

调整Apache的请求限制

Apache本身也有自己的大小和超时限制,这些会直接影响上传:

  • 打开Apache的主配置文件(比如/etc/apache2/apache2.conf)或者你的虚拟主机配置文件,添加或者修改:
    LimitRequestBody 21474836480  # 这是20G对应的字节数,1G=1073741824字节
    Timeout 600  # 把超时时间改成10分钟,保证大文件能传完
    
  • 至于日志里的caught SIGWINCH,这个信号一般意味着Apache进程被意外终止了,很大概率是上传大文件时内存占用太高,或者进程超时被系统杀掉。你可以去看看Apache的MPM配置(比如/etc/apache2/mods-available/mpm_prefork.conf),调整一下进程数避免内存过载:
    StartServers        4
    MinSpareServers     2
    MaxSpareServers     8
    MaxRequestWorkers   32
    MaxConnectionsPerChild  1000
    
    这些参数根据你的服务器内存来调,比如内存小的话就降低MaxRequestWorkers,别让同时处理太多大文件上传把内存耗光。

验证配置并重启服务

  • 你可以执行php -i | grep -E "upload_max_filesize|post_max_size"来确认PHP的配置有没有生效,或者在你的PHP页面里写个phpinfo()查看实际生效的参数。
  • 最后重启Apache服务:sudo systemctl restart apache2

额外排查点

如果还是不行,再检查这两个地方:

  • 服务器的磁盘空间够不够,还有你代码里的目标路径/opt/upload/有没有写入权限(注意你代码里输出的是传到/tmp,但实际路径是/opt/upload/,别搞混了)
  • 如果有防火墙或者反向代理服务器(比如Nginx),看看它们有没有额外的大小限制

备注:内容来源于stack exchange,提问作者camilajenny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:28:04