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

同服务器跨域名文件上传路径错误求助

解决跨域名目录文件上传路径问题

你的问题根源很清晰:$_SERVER['DOCUMENT_ROOT'] 返回的是当前运行脚本所属域名(也就是www.xyz.com)的网站根目录,也就是 /home/www/xyz.com/,所以你直接拼接 /abc.com/assets/upload/ 时,会生成错误的嵌套路径 /home/www/xyz.com/abc.com/...,而不是指向服务器上abc.com的独立目录。

下面给你几个可行的解决方案,按灵活性和可维护性排序:

1. 使用相对路径跳出当前域名目录

你注释掉的 ../ 写法其实是正确的思路,它会让路径跳出xyz.com的根目录,回到服务器上存放两个域名的父目录(/home/www/),这样就能正确指向abc.com的上传目录:

function video() {
  if(isset($_POST["submit"])) {
    $extension = pathinfo($_FILES['videourl']['name'][0], PATHINFO_EXTENSION);
    $video_file_name = 'vid_'.time().rand(0,10000000).'.'.$extension;
    // 跳出xyz.com根目录,指向abc.com的上传文件夹
    $path = $_SERVER['DOCUMENT_ROOT'] . '/../abc.com/assets/upload/' . $video_file_name;
    
    // 额外优化:确保目标目录存在,避免上传失败
    $target_dir = dirname($path);
    if (!file_exists($target_dir)) {
        mkdir($target_dir, 0755, true); // 递归创建目录
    }
    
    // 检查上传是否成功,增加错误处理
    if (move_uploaded_file($_FILES["videourl"]["tmp_name"][0], $path)) {
        echo $video_file_name;
    } else {
        echo "上传失败,请检查目标目录的写入权限";
    }
  } else {
    $this->load->view('test');
  }
}

2. 使用绝对路径直接指定

如果你的服务器目录结构不会轻易变动,可以直接写死abc.com上传目录的绝对路径,这样完全避免依赖DOCUMENT_ROOT:

$path = '/home/www/abc.com/assets/upload/' . $video_file_name;

这种方式简单直接,但如果后续服务器目录调整,需要手动修改代码,灵活性稍差。

3. 定义全局常量(推荐长期维护)

在你的项目配置文件中定义一个常量,专门指向abc.com的上传目录,这样后续路径变动只需要修改常量定义即可:

// 在配置文件中添加
define('ABC_UPLOAD_DIR', '/home/www/abc.com/assets/upload/');

// 然后在上传函数中使用
$path = ABC_UPLOAD_DIR . $video_file_name;

关键注意事项:

必须确保运行www.xyz.com的Web服务器用户(比如www-data、apache等)对/home/www/abc.com/assets/upload目录有写入权限,否则move_uploaded_file会执行失败。你可以通过服务器的文件管理器或命令行(chmod、chown)调整权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:52:06