同服务器跨域名文件上传路径错误求助
解决跨域名目录文件上传路径问题
你的问题根源很清晰:$_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
相关产品推荐
相关产品推荐

