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

PHP本地文件上传至远程服务器失败问题排查

问题分析与解决方案

首先要澄清一个关键误解:PHP的文件上传流程不是直接读取你本地的C:\Data\abc.txt路径。当你通过浏览器选择文件提交表单时,浏览器已经把文件上传到了服务器的临时存储目录(也就是$_FILES['image']['tmp_name']指向的路径),move_uploaded_file的作用是把这个临时文件移动到服务器上的目标位置,而不是从你本地读取文件。你看到的“试图在远程服务器的/server/abc.txt查找文件”其实是正常的——临时文件本身就在服务器上,只是你的代码路径处理有误导致移动失败。

你的代码里有几个明显的问题,我逐个帮你排查:

1. move_uploaded_file目标路径错误

你当前写的是move_uploaded_file($file_tmp, '/uploads');,这里有两个问题:

  • /uploads是服务器根目录下的文件夹,但你必须指定完整的目标文件名,而不是只写目录。正确的写法应该是把文件名拼接到路径后面,比如'/uploads/' . $file_name。
  • 要确保服务器上的/uploads目录确实存在,如果不存在,move_uploaded_file会直接失败。

2. 未定义的$root_path变量

代码里有一行$original = $root_path .$file_name;,但你没有给$root_path赋值,这会导致这个变量为空,虽然这行目前不影响上传,但后续如果用到会引发路径错误。

3. 目录权限问题

服务器上的目标上传目录(比如/uploads)需要给PHP运行的用户(通常是www-data、apache或者nginx用户)赋予写权限,否则move_uploaded_file无法写入文件。

修正后的代码

<?php
// 定义上传根路径,可根据服务器实际情况修改
// 示例绝对路径:$root_path = '/var/www/html/uploads/';
// 示例相对路径(相对于当前脚本所在目录):$root_path = './uploads/';
$root_path = '/var/www/html/uploads/';

// 先检查上传目录是否存在,不存在则自动创建
if (!is_dir($root_path)) {
    mkdir($root_path, 0755, true); // 0755权限确保PHP进程能读写
}

if(isset($_FILES['image'])){ 
    $errors= array(); 
    $file_name = $_FILES['image']['name']; 
    $file_size = $_FILES['image']['size']; 
    $file_tmp = $_FILES['image']['tmp_name']; 
    $file_type=$_FILES['image']['type']; 

    // 准确的100MB大小限制(100*1024*1024)
    if($file_size > 104857600){ 
        $errors[]='File size must be less than 100 MB'; 
    } 

    if(empty($errors)==true){ 
        // 拼接完整的目标文件路径
        $target_path = $root_path . $file_name;
        if(move_uploaded_file($file_tmp, $target_path)){
            echo "Success! File uploaded to: " . $target_path;
        } else {
            echo "Failed to move uploaded file. Please check directory permissions!";
        }
    } else { 
        print_r($errors); 
    } 
} 
?> 
<html> 
<body> 
<form action="" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="image" /> 
    <input type="submit"/> 
</form> 
</body> 
</html>

额外需要注意的配置

  • 检查PHP配置文件php.ini中的上传参数:
    • upload_max_filesize:设置为大于100MB(比如upload_max_filesize = 100M)
    • post_max_size:这个值要比upload_max_filesize大(比如post_max_size = 110M)
    • upload_tmp_dir:确保这个临时目录存在且PHP有读写权限
  • 如果你的服务器用了Nginx或Apache,还要检查服务器层面的上传大小限制(比如Nginx的client_max_body_size)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:35