关于为什么这在我的localhost中完全正常工作但不在我上传到的服务器中的任何想法?在服务器中,它创建了zip但不创建文件夹,它将所有文件放在.zip中,没有文件夹区别。
function rzip($source, $destination) {
// create object
$zip = new ZipArchive();
// open archive
if ($zip->open($destination, ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source));
foreach ($iterator as $key=>$value) {
$new_filename = substr($key,strrpos($key,"/") + 1);
$zip->addFile(realpath($key), $new_filename) or die ("ERROR: Could not add file: $key");
}
$zip->close();
}
答案 0 :(得分:0)
你在地方误用(或不使用)RecursiveDirectoryIterator
。
第一点是你将遍历可能不受欢迎的点文件夹(.
和..
);要停止此操作,请使用SKIP_DOTS
标记。
接下来,有一些工具可以获取相对于正在迭代的主目录的文件路径,并获得实际路径;分别使用getSubPathname()
和getRealpath()
方法。
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
$source, RecursiveDirectoryIterator::SKIP_DOTS));
foreach ($iterator as $key => $value) {
$localname = $iterator->getSubPathname();
$filename = $value->getRealpath();
$zip->addFile($filename, $localname) or die ("ERROR: Could not add file: $key");
}
以上只是答案,因为评论太长了。上面没有回答为什么,“这完全在我的本地主机中工作,但不在服务器中”。