我面临提取位于不同用户目录.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
站点参数添加一个新路径。知道此选项具体如何工作的人,请回复此帖子。提前致谢。