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

Windows下基础PHP文件上传脚本无限挂起且$_FILES为空求助

针对Windows下PHP文件上传挂起&$_FILES为空问题的排查方案

这种Windows独有的上传异常真的挺闹心的,我之前帮朋友排查过类似情况,结合你已经做过的检查,给你几个针对性的方向试试:

  • Windows临时目录的深层权限/路径问题
    你已经检查了tmp权限,但要注意:PHP在Windows下默认可能用系统临时目录(比如C:\Windows\Temp),得确认PHP进程的运行用户(比如IIS的IIS_IUSRS组、Apache的运行账户)对这个目录有写入+修改+删除的完整权限。另外,建议把php.ini里的upload_tmp_dir改成明确的绝对路径,比如upload_tmp_dir = "C:\PHP\UploadTemp",手动创建这个目录并给运行用户完全控制权限——相对路径在Windows环境下偶尔会有解析异常。

  • IIS环境的POST请求拦截(CGI/FastCGI模式)
    如果是IIS搭配PHP,光改PHP的upload_max_filesize和post_max_size还不够,IIS本身有maxAllowedContentLength限制(默认约30MB),超过这个值的请求会被IIS直接拦截,PHP根本接收不到,表现就是挂起+$_FILES为空。可以在站点的web.config里添加:

    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength="1073741824" /> <!-- 这里设为1GB,按需调整 -->
        </requestFiltering>
      </security>
    </system.webServer>
    

    同时要保证php.ini里的post_max_size必须大于upload_max_filesize,比如前者设为1024M,后者设为900M。

  • 杀毒软件/防火墙的实时扫描拦截
    Windows下的杀毒软件(比如Windows Defender、360安全卫士)经常会扫描上传生成的临时文件,导致PHP读取临时文件时被阻塞,进而出现挂起。可以临时关闭实时防护试试,或者把PHP的临时目录加入杀毒软件的白名单。

  • FastCGI超时设置过短
    如果用IIS+FastCGI运行PHP,FastCGI的默认超时时间可能不足以支撑大文件上传。可以在IIS管理器的「FastCGI设置」里,找到对应的PHP项,把「活动超时」和「请求超时」调大(比如设为300秒/5分钟)。

  • 最后再确认一遍表单属性
    虽然你说Linux下正常,但还是要检查HTML表单标签里有没有enctype="multipart/form-data"——这是文件上传的必填属性,少了的话$_FILES必然为空,只是Linux和Windows的异常表现可能不同。

快速测试方法

先上传一个1KB以内的极小文本文件:

  • 如果小文件正常,说明问题大概率是文件大小相关的限制(IIS或PHP的参数);
  • 如果小文件也挂起,那基本是临时目录权限或杀毒软件拦截的问题。

内容的提问来源于stack exchange,提问作者sjw0525

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:08