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

PHP表单文件上传脚本失效排查求助:原正常现无法上传文件

排查PHP文件上传失效的实用步骤

这种改完代码后某功能突然罢工、还没法回退的情况真的让人头大😅,不过好在你其他功能(PDF生成、文件夹创建)都正常,说明服务器环境和基础权限没大问题,咱们聚焦在上传相关的细节上,按这个顺序查:

  • 先检查表单的enctype属性
    这绝对是最容易被忽略的坑!如果表单没加enctype="multipart/form-data",文件上传根本没法工作。你说修改了文本和新增了内容,会不会不小心删掉或者改了表单的这个属性?直接看你的表单标签:

    <form method="post" action="你的处理脚本.php" enctype="multipart/form-data">
    

    一定要确保这个属性存在且完全正确。

  • 核对文件输入的name和后端接收变量
    要是你改了表单里文件输入框的name值,比如原来的name="docs[]"改成了别的,但后端还是用$_FILES['docs']来接收,那肯定拿不到文件。检查前端的文件输入:

    <input type="file" name="docs[]" multiple> <!-- 假设是多文件上传的场景 -->
    

    再对应后端处理$_FILES数组的代码,确保name完全匹配,大小写也要注意!

  • 检查上传大小限制是否被改动
    虽然之前正常,但会不会在新增的代码里改了上传限制?比如脚本里加了这些配置但数值太小:

    ini_set('upload_max_filesize', '2M'); // 要是你的文档大于2M就会失败
    ini_set('post_max_size', '2M');
    

    可以在处理脚本里加一段代码打印当前的上传配置,看看是不是被改了:

    echo "upload_max_filesize: " . ini_get('upload_max_filesize') . "<br>";
    echo "post_max_size: " . ini_get('post_max_size') . "<br>";
    echo "max_file_uploads: " . ini_get('max_file_uploads') . "<br>";
    

    注意max_file_uploads至少要设为3,不然没法同时传3个文件。

  • 查看文件上传的错误码(关键!)
    PHP的$_FILES数组里每个文件都自带error字段,能直接告诉你问题根源。在处理上传的代码里加一段调试代码:

    if (isset($_FILES['docs'])) {
        foreach ($_FILES['docs']['error'] as $key => $error) {
            echo "第".($key+1)."个文件的错误码:".$error."<br>";
            // 给你对应下错误码含义:
            // 0=上传成功 | 1=超过upload_max_filesize限制 | 2=超过表单MAX_FILE_SIZE限制
            // 3=文件仅部分上传 | 4=未选择文件 | 6=临时文件夹缺失 | 7=文件写入磁盘失败
        }
    }
    

    看错误码基本能定位80%的问题,比如如果是6,那可能是临时文件夹权限出问题了,但你之前正常,会不会改代码时不小心动了相关配置?

  • 确认目标文件夹的写入权限
    你说文件夹能正常创建,但创建后的权限是不是够服务器写入?比如用mkdir()的时候有没有加正确的权限参数:

    mkdir($target_dir, 0755, true); // 0755一般能保证服务器有写入权限
    

    可以临时打印目标文件夹的权限看看:

    echo "目标文件夹权限:".decoct(fileperms($target_dir))."<br>";
    

    要是权限不对,临时改成775(别用777,不安全)测试下,排除权限问题。

  • 排查上传逻辑的代码改动
    你新增的内容里,会不会在上传代码前加了输出(比如echo、var_dump),导致HTTP头已经发送,影响了文件上传?或者有没有改了文件移动的路径?比如原来的$target_file = $target_dir . basename($_FILES['docs']['name'][$key]);是不是写错了路径?

    另外,有没有加过严的文件名过滤?比如禁止了某些后缀,但你上传的文档后缀刚好在黑名单里?

要是以上都排查完还是没找到问题,建议把表单部分和上传处理的核心代码贴出来(敏感信息记得打码),这样更容易精准定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:37:39