PHP: переместить файл из домена в поддомен - PullRequest
5 голосов
/ 29 июня 2010

У меня есть сайт в домене, назовем его «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

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

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

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

Jurgen

Ответы [ 3 ]

2 голосов
/ 29 июня 2010

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

Уловки, которые я могу придумать:

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

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

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

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

0 голосов
/ 29 июня 2010

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

0 голосов
/ 29 июня 2010

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

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

...