【发布时间】:2014-03-28 01:03:57
【问题描述】:
尝试获取导入/导出功能。
- 使用包含文件的文件夹
- 使用 ZipArchive 在 PHP 中压缩文件夹
- 使用 ZipArchive 解压缩压缩文件夹
-
新建文件夹,但里面的文件不见了
function unArchive(){ $zip = new ZipArchive; $res = $zip->open('zipTest.zip'); if ($res === TRUE) { echo 'ok'; $zip->extractTo("testfolder2"); $zip->close(); } else { echo 'failed, code:' . $res; } } function Zip($source, $destination){ if (!extension_loaded('zip') || !file_exists($source)){ return false; } $zip = new ZipArchive(); if (!$zip->open($destination, 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){ $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)); } } }else if (is_file($source) === true){ $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); } Zip( "testfolder/" , "./zipTest.zip" ); unArchive();
代码适用于单个文件。 使用 ZipArchive 压缩文件后,我可以使用 WinRAR 手动解压缩,然后使用 WinRAR 重新压缩,然后 ZipArchive 可以成功解压缩该文件。 问题是 ZipArchive 不会提取它直接压缩的存档。 我还可以在 Notepad++ 中看到 ZipArchive zip 与 WinRAR zip 不同,文件大小也不同。我可以成功地将 winrar 作为 php 中的系统命令调用以获得所需的功能,但这似乎是个坏主意。 ZipArchive 创建无法提取的 zip 文件是否有某些原因?
错误消息:ZipArchive::extractTo(): [$zip->extractTo("testfolder2");] 行 [file] 中的参数无效
【问题讨论】:
-
你有没有得到答案,我在 Windows 上遇到了同样的问题
-
testfolder2文件夹是否已经存在?如果没有,那么您可能需要先创建一个 →if( ! file_exist('testfolder2')) {mkdir('testfolder2', 0777)}
标签: php zip unzip ziparchive