2010-06-29 55 views
5

我有一个域名上的网站,我们称之为“mydomain.com”,其中人们可以登录。 此域名有子域sub.mydomain.comPHP:将文件从域名移动到子域名

当用户上传主域上的文件时,我想将它移动到sub.mydomain.com上的uploads文件夹。 我想将文件移动到的文件夹具有完全写入/读取权限。

我的代码,上传文件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

个人忌讳:我讨厌术语*子域*当托管服务使用它作为同义词*网站*,或者更具体地说,*第二类网站,我们让你有这样的便宜的计划看起来大而我们仍然为昂贵的计划*留下市场。 :) – 2010-06-29 11:54:27

回答

2

您的托管服务不允许脚本做的东西的httpdocs目录中的每个虚拟主机和共享/tmp目录之外。这严重限制了网站之间信息交换的可能性。

技巧,我能想到的:

  1. 存放在从源站点的/tmp目录中的临时文件,并在目标网站触发过程来获取文件。你可以使用curl函数来做到这一点。

  2. 在一个公共数据库中存储的文件。如果您认为这会影响您的网站性能,则存储不必是永久性的。目标站点只需检查它是否有未决的传入文件。

  3. 将文件添加到队列(可能是httpdocs中的一个特殊目录)并编写命令行脚本将它们推送到目标站点。用cron运行这个命令(可以说,每分钟一次)。

恕我直言,#2看起来切实可行。

+0

也许它没有托管的地方,它是不可能改变php.ini? – hop 2010-06-29 11:53:14

+0

感谢您的回复,#2确实看起来像我可以看看的一个选项。 – Jurgen 2010-06-29 12:02:28

0

作为错误信息显示,文件访问被限制为与在php.iniopen_basedir指令某些目录。

如果你有访问服务器的配置,你可以改变这种状况。

+0

嗯,是的,我完全忽略了一个明显的可能性:) – 2010-06-29 11:55:19

+0

我不清楚你希望我在open_basedir中改变什么。你能否提供一些额外的解释?例如,当我有'/ var/www/vhosts/mydomain.com/httpdocs'作为主目录,并且'/ var/www/vhosts/mydomain.com/subdomains/sub/httpdocs'作为子域时? – Jurgen 2010-06-29 12:10:10

+0

@Jurgen:我不想让你改变任何事情,因为我无所谓。特别是因为你自己似乎没有付出任何努力,甚至没有试图提供更多有用的信息。 – hop 2010-06-29 12:24:40

0

为什么不创建一个符号链接为您的子域名,然后通过sub.domain.com网址到达图像?