1

我面临提取位于不同用户目录.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在创建新客户端时在第一个网站上的后端工作时在第二个 webroot 目录中提取存档。

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站点参数添加一个新路径。知道此选项具体如何工作的人,请回复此帖子。提前致谢。

4

0 回答 0