Zip功能在服务器上无法正常工作

时间:2011-07-16 16:42:27

标签: php zip

关于为什么这在我的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();
}

1 个答案:

答案 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");
}

以上只是答案,因为评论太长了。上面没有回答为什么,“这完全在我的本地主机中工作,但不在服务器中”。