PHP: переместить файл из домена в поддомен

У меня есть сайт на домене, назовем его "mydomain.com", где люди могут авторизоваться. У этого домена есть поддомен sub.mydomain.com.

Когда пользователь загружает файл на основной домен, я хочу переместить его в папку uploads на sub.mydomain.com. Папка, в которую я хочу переместить файл, имеет полные права на запись/чтение.

Мой код, который загружает файл:

$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

Может ли кто-нибудь просветить меня с решением моей проблемы?

Последнее замечание: я знаю, что могу войти в поддомен и загрузить туда файл напрямую, однако я хотел бы сохранить вход в основной домен для других целей.

Заранее спасибо.

Юрген


person Jurgen    schedule 29.06.2010    source источник
comment
Личное раздражение: я ненавижу термин субдомен, когда службы хостинга используют его как синоним веб-сайта или, точнее, второсортного веб-сайта, который мы разрешаем вам чтобы ваш дешевый план выглядел великолепно, в то время как мы по-прежнему уходим с рынка в пользу дорогих планов. :)   -  person Álvaro González    schedule 29.06.2010


Ответы (3)


Ваша служба хостинга не позволяет вашим сценариям выполнять действия за пределами каталога httpdocs каждого виртуального хоста и общего каталога /tmp. Что серьезно ограничивает возможности обмена информацией между сайтами.

Трюки, которые я могу придумать:

  1. Сохраните временный файл в каталоге /tmp на исходном сайте и запустите процесс на целевом сайте для извлечения файла. Для этого вы можете использовать функции curl.

  2. Храните файлы в общей базе данных. Хранилище не обязательно должно быть постоянным, если вы считаете, что это повлияет на производительность вашего сайта. Целевому сайту просто нужно проверить, есть ли у него ожидающие входящие файлы.

  3. Добавьте файлы в очередь (возможно, в специальный каталог внутри httpdocs) и напишите сценарий командной строки, чтобы отправить их на целевой сайт. Запускайте эту команду через cron (скажем, раз в минуту).

ИМХО, №2 выглядит выполнимым и надежным.

person Álvaro González    schedule 29.06.2010
comment
может быть, он не размещен где-то, где невозможно изменить php.ini? - person ; 29.06.2010
comment
Спасибо за ваш ответ, № 2 действительно выглядит как вариант, на который я мог бы взглянуть. - person Jurgen; 29.06.2010

Как следует из сообщения об ошибке, доступ к файлам ограничен определенными каталогами с open_basedir в php.ini.

Если у вас есть доступ к конфигурации сервера, вы можете это изменить.

person Community    schedule 29.06.2010
comment
Эх, да, очевидная возможность, которую я полностью упустил :) - person Álvaro González; 29.06.2010
comment
Мне непонятно, что вы хотите, чтобы я изменил в open_basedir. Не могли бы вы дать дополнительные пояснения? Например, когда у меня есть /var/www/vhosts/mydomain.com/httpdocs в качестве основного каталога и /var/www/vhosts/mydomain.com/subdomains/sub/httpdocs в качестве поддомена? - person Jurgen; 29.06.2010
comment
@Jurgen: я не хочу, чтобы ты что-то меняла, так как мне все равно. тем более, что вы, кажется, не прилагаете к этому никаких усилий, даже не пытаетесь дать немного больше полезной информации. - person ; 29.06.2010
comment
Тогда спасибо за фокус-покус. Почему вы вообще удосужились опубликовать ответ, если вы скорее отправите меня в неизвестном направлении, чем скажете мне, куда он направляется? - person Jurgen; 29.06.2010

Почему бы не создать символическую ссылку для вашего поддомена, а затем получать доступ к изображениям через URL-адрес sub.domain.com?

person fabrik    schedule 29.06.2010