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

PHP图片上传脚本move_uploaded_file失效 临时变量为空问题

核心错误点

你的上传失败完全是代码拼写和变量使用错误导致的,和服务器配置、目录权限无关:

  • $_FILES 超全局变量中,临时文件路径的键名是 tmp_name,你写成了 temp_name,键名不存在导致 $tempname 始终为空,move_uploaded_file() 拿不到源文件路径自然执行失败。你自己print_r($_FILES)的时候就能看到数组里的正确键名,只是取值时拼写错误。
  • 调试时输出的$folder变量在整段代码里从未定义,你实际存储上传目录路径的变量是$upload_dir,所以这个变量输出空是正常情况,和上传故障没有关系。
其他待修复的隐患
  • 代码没有判断文件上传的错误码,哪怕上传过程中出现大小超限、部分上传、空文件等问题,也会直接执行后续逻辑,把无效数据写入数据库
  • SQL语句直接拼接用户传入的参数,存在SQL注入风险
  • move_uploaded_file()执行后没有判断返回结果,文件移动失败也会继续写库
  • 调用mysqli_error()时没有传入数据库连接参数$db,出错时拿不到正确的报错信息
  • 前端表单必须设置enctype="multipart/form-data"属性才能正常传输文件,你目前能在$_FILES中看到临时文件说明这个配置是对的,后续修改时注意不要删掉这个属性。
修正后的可运行代码
if(isset($_POST['submit']))
{
    $date = date('Y-m-d H:i:s');
    // 对用户输入做转义,避免SQL注入,生产环境建议改用预处理语句
    $subject = mysqli_real_escape_string($db, $_POST['subject']);
    $description = mysqli_real_escape_string($db, $_POST['description']);

    $upload_dir = './image';
    $filename = $_FILES["choosefile"]["name"];
    // 修正键名拼写错误
    $tempname = $_FILES["choosefile"]["tmp_name"];
    $upload_error = $_FILES["choosefile"]["error"];

    // 先校验上传状态
    if($upload_error !== UPLOAD_ERR_OK) {
        exit("文件上传失败,错误码:" . $upload_error);
    }

    // 执行文件移动,校验执行结果
    if(move_uploaded_file($tempname, $upload_dir . "/" . $filename)) {
        $safe_filename = mysqli_real_escape_string($db, $filename);
        $insert = mysqli_query($db,"INSERT INTO xv.post (subject, description, creation_date, image) VALUES ('$subject', '$description', '$date', '$safe_filename')");
        
        if(!$insert) {
            // 修正mysqli_error参数缺失问题
            echo mysqli_error($db);
        } else {
            print "<p>调试信息:</p>";
            print_r($_FILES);
            // 替换未定义的$folder为实际存在的$upload_dir变量
            echo "<br>临时文件路径:" . $tempname . "<br>目标存储目录:" . $upload_dir;
        }
    } else {
        exit("文件从临时目录移动到目标目录失败");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:09:16