每次我从 PHP 创建 zip 文件时,都会有一个空文件夹“\data”。但是服务器中没有这样的文件夹。当我解压缩 zip 文件并浏览该空文件夹时,它显示的路径如下:
\data/www/subdomains/site/httpdocs/
它看起来像我要压缩的文件夹的绝对路径。
这是我的代码:
<?php
$file = tempnam("tmp","zip");
zip_directory($_GET['catname'].'/'.$_GET['directtozip'].'/',$file);
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="'.$_GET['directtozip'].'.zip"');
readfile($file);
unlink($file);
function zip_directory($source,$tempfile){
if(!extension_loaded('zip') || !file_exists($source)) return false;
$zip = new ZipArchive();
if(!$zip->open($tempfile,ZIPARCHIVE::CREATE)) return false;
$source = str_replace('\\','/',realpath($source));
if(is_dir($source) === true){
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach($files as $file){
// Excluded folders or file from zip.
$chk_1 = strstr($file,$source .'/'.'.svn');
if($chk_1){continue;}
$file = str_replace('\\', '/', realpath($file));
if (is_dir($file) === true)
{
$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
}
else if (is_file($file) === true)
{
$zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
}
}
}
elseif(is_file($source) === true) $zip->addFromString(basename($source), file_get_contents($source));
return $zip->close();
}
zip_directory($source,$tempfile);
?>
提前致谢。