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

使用krajee bootstrap upload上传失败,move_uploaded_file报错求排查

排查 move_uploaded_file 上传失败的常见低级问题

我完全懂你现在的困扰——旧上传路径(777权限)能正常跑,但换了新目标路径后,用krajee Bootstrap Upload上传就卡在move_uploaded_file环节,明明感觉是自己犯了低级错误,就是找不到在哪。结合你贴的代码,我整理了几个最容易忽略的点,你可以挨个排查:

1. 先盯紧新路径的权限与正确性

虽然旧uploads文件夹权限没问题,但你得确认新目标路径的实际状态:

  • 先检查代码里的"uploads" . DIRECTORY_SEPARATOR . ...是不是真的指向你预期的新路径?有没有拼写错误?比如是不是应该是../uploads(上级目录)或者其他相对路径?
  • 在代码里加一行var_dump(is_writable("uploads"));,直接输出这个目录是否可写。有时候就算你设了777,也可能因为目录所有者、用户组不匹配,导致实际没有写入权限。

2. 文件名生成的小细节

你用md5(uniqid())生成文件名的思路没问题,但可以确认下最终生成的路径是否合法:

  • 在move_uploaded_file之前加一句var_dump($target);,看看最终的文件路径是不是符合预期,有没有出现奇怪的字符或者层级错误。
  • 另外,处理后缀的array_pop($ext),如果遇到类似file.name.txt这种多后缀的文件,只会拿到最后一个后缀,这本身没问题,但你可以确认下$ext数组是不是正常。

3. 临时文件的有效性检查

有时候前端看似传了文件,但服务器的临时文件可能出问题:

  • 在move_uploaded_file之前加个判断,确认临时文件是合法的上传文件:
    if(!is_uploaded_file($_FILES["filer42"]["tmp_name"][$i])) {
        var_dump('临时文件不存在或不是合法的上传文件');
        exit;
    }
    
  • 不过旧脚本能正常运行的话,服务器的upload_tmp_dir配置大概率没问题,但也可以快速确认下这个目录的权限。

4. 代码里的明显语法错误!

我看你贴的代码里有一行:if ($success === true) {. $output = [];——这里多了个多余的.号!这会直接触发PHP语法错误,导致整个脚本运行失败,返回的JSON肯定是错误的!这绝对是个典型的低级错误,你应该是复制代码的时候手滑了,把它改成:

if ($success === true) {
    $output = [];
    $output = ['uploaded' => $paths];
}

这个错误大概率就是你现在的核心问题,先把它修复了再看其他的。

5. 看错误日志找精准线索

如果上面的点都排查完还是不行,赶紧打开PHP的错误日志看看具体报错信息——move_uploaded_file失败时,日志里会明确告诉你是权限不足、路径不存在还是其他问题,比你自己猜要高效多了。

先把那个语法错误修复,再一步步排查,应该很快就能解决问题啦。

内容的提问来源于stack exchange,提问作者Sebastian Støttrup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:57:18