我在域名上有一个网站,我们称之为“mydomain.com
”,人们可以登录。
此域名具有子域名sub.mydomain.com
。
当用户在主域上传文件时,我想将其移至uploads
上的sub.mydomain.com
文件夹。
我想将文件移动到的文件夹具有完全写入/读取权限。
上传te文件的代码:
$filename = 'background_' . $_SESSION['username'] . '.jpg';
if (is_uploaded_file($_FILES['background']['tmp_name']))
{
move_uploaded_file($_FILES['background']['tmp_name'],
"/var/www/vhosts/mydomain.com/subdomains/sub/httpdocs/uploads/" . $filename);
}
运行此代码时,我收到以下警告/错误:
Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/var/www/vhosts/mydomain.com/subdomains/sub/httpdocs/uploads/background_User.jpg) is not within the allowed path(s): (/var/www/vhosts/mydomain.com/httpdocs:/tmp) in /var/www/vhosts/dezeactie.nl/httpdocs/opmaak.php on line 152
任何人都可以通过我的问题解决方案来启发我吗?
最后一点说明:我知道我可以在子域名上进行登录并直接在那里上传文件,但我希望将登录保留在主域名中以用于其他目的。
提前致谢。
尔根
答案 0 :(得分:2)
您的托管服务不允许您的脚本在每个虚拟主机的httpdocs
目录和共享的/tmp
目录之外执行操作。这严重限制了站点之间信息交换的可能性。
我能想到的技巧:
将临时文件存储在源站点的/tmp
目录中,并触发目标站点中的进程以获取该文件。您可以使用curl函数来执行此操作。
将文件存储在公共数据库中。如果您认为存储会影响您的网站性能,则存储不需要是永久性的。目标网站只需知道是否有待处理的传入文件。
将文件添加到队列(可能是httpdocs
内的特殊目录)并编写命令行脚本以将其推送到目标站点。使用cron运行此命令(假设,每分钟一次)。
答案 1 :(得分:0)
正如错误消息所示,文件访问仅限于php.ini
中open_basedir指令的某些目录。
如果您可以访问服务器的配置,则可以更改它。
答案 2 :(得分:0)
为什么不为子域创建符号链接,然后通过sub.domain.com url访问图像?