Как распаковать Zip-архив, расположенный под другим каталогом пользователя в ISPConfig 3 - PullRequest
0 голосов
/ 16 января 2020

У меня проблема с извлечением архива .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. Люди, которые знают, как работает эта опция, пожалуйста, ответьте на этот пост. Заранее спасибо.

...