PHP:将文件从域移动到子域

时间:2010-06-29 11:36:40

标签: php file subdomain move

我在域名上有一个网站,我们称之为“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

任何人都可以通过我的问题解决方案来启发我吗?

最后一点说明:我知道我可以在子域名上进行登录并直接在那里上传文件,但我希望将登录保留在主域名中以用于其他目的。

提前致谢。

尔根

3 个答案:

答案 0 :(得分:2)

您的托管服务不允许您的脚本在每个虚拟主机的httpdocs目录和共享的/tmp目录之外执行操作。这严重限制了站点之间信息交换的可能性。

我能想到的技巧:

  1. 将临时文件存储在源站点的/tmp目录中,并触发目标站点中的进程以获取该文件。您可以使用curl函数来执行此操作。

  2. 将文件存储在公共数据库中。如果您认为存储会影响您的网站性能,则存储不需要是永久性的。目标网站只需知道是否有待处理的传入文件。

  3. 将文件添加到队列(可能是httpdocs内的特殊目录)并编写命令行脚本以将其推送到目标站点。使用cron运行此命令(假设,每分钟一次)。

  4. 恕我直言,#2看起来既可行又可靠。

答案 1 :(得分:0)

正如错误消息所示,文件访问仅限于php.iniopen_basedir指令的某些目录。

如果您可以访问服务器的配置,则可以更改它。

答案 2 :(得分:0)

为什么不为子域创建符号链接,然后通过sub.domain.com url访问图像?