У меня проблема с извлечением архива .zip
, расположенного в другой папке пользователя web/
. Позвольте мне объяснить: у меня есть 2 веб-сайта, написанные на чистом php. First
веб-сайт, которым я управляю Second
. У каждого клиента на веб-сайте Second
есть собственная папка, расположенная в root
со схожим кодом, но с разными конфигами. Выглядит это так:
Второй сайт
...
/var/www/clients/client0/web2/web/client1/...
/var/www/clients/client0/web2/web/client2/...
...
Как вы понимаете, владельцем этих файлов является пользователь: web2
и группа: client0
И Первое местоположение сайта:
...
/var/www/clients/client0/web1/web/...
...
Владелец этих файлов: пользователь: web1
и группа: client0
Что я пытаюсь для этого нужно извлечь zip
архив во втором веб-каталоге root во время работы над моим бэкэндом на первом веб-сайте при создании нового клиента.
Вот код, который я пробовал (это прекрасно работает на моем локальном хосте, когда пользователь: www-data
и группа: www-data
):
...
if (!file_exists('/var/www/clients/client0/web2/web/' . $_POST['storeid'])) {
$zip = new ZipArchive;
$dir = '/var/www/clients/client0/web2/web/';
$install_dir = $dir . 'backup/';
$res = $zip->open($install_dir . 'client_install.zip');
if ($res === TRUE) {
//Try to execute
$zip->extractTo($dir . $_POST['storeid'] . '/'); //var/www/clients/client0/web2/client2
$zip->close();
//Set permitions on new store folder
chmod_r($dir . $_POST['storeid'], 0755, 0644);
echo "\nExtracted successfully to " . $dir;
die();
} else {
echo "Failed to open zip: " . $dir . "client_install.zip" . " \n";
die();
}
}
...
В то время, когда я запускаю этот код, я получаю сообщение:
Не удалось открыть zip: / var / www/clients/client0/web2/web/backup/client_install.zip
Я знаю, что это может быть связано с разрешениями пользователя. Как решить эту проблему с учетом сохранения той же среды ISPConfig и прав доступа пользователя.
Обновление:
Вот сообщение журнала ошибок:
PHP Предупреждение: ZipArchive :: open (): действует ограничение open_basedir. Файл (/ var / www/clients/client0/web2/web/client1/backup/client_install.zip) не находится в допустимых путях: (/ var / www/clients/client0/web1/web: / var / www/clients/client0/web1/private: / var / www/clients/client0/web1/tmp: / var / www/test.site.com/web: / srv / www/test.site.com/web: / usr / share / php5: / usr / share / php: / tmp: / usr / share / phpmyadmin: / etc / phpmyadmin: / var / lib / phpmyadmin) в / var / www/clients/client0/web1/web/process.php в строке 261.
Мой вопрос может показаться глупым, поэтому извините заранее. Но может ли изменение записи на определенном веб-сайте с параметром open_basedir
повлиять на производительность всего сервера или невозможность перезапуска Apache. У меня вопрос, потому что мой тестовый сайт расположен на сервере с рабочими сайтами. И я бы не хотел вносить эти изменения без предварительной консультации. Поэтому я думаю, что мне нужно добавить новый путь к параметру сайта open_basedir
. Люди, которые знают, как работает эта опция, пожалуйста, ответьте на этот пост. Заранее спасибо.