我完全不知道为什么这不起作用。帮助!
$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);
if ($res === 'TRUE') {
$unzip_success= $zip->extractTo('/temp/', "inscriptions.txt")
$zip->close();
}
答案 0 :(得分:3)
如果什么都不起作用,那么检查你的服务器是否是linux。 如果它的linux你可以运行unzip命令通过php的system / exec函数解压缩你的文件。 即
system("unzip archive.zip");
要提取特定文件,您可以检查man docs进行解压缩。很多时候由于服务器参数zip库不能正常工作,在那种情况下我切换回linux命令。
答案 1 :(得分:2)
问题在于您引用的是TRUE
,这是一个关键字,应该没有单引号。另外,您可以在使用locateName提取文件之前检查文件是否存在于zip存档中:
$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);
if ($res === true && $zip->locateName('inscriptions.txt') !== false) {
$unzip_success= $zip->extractTo('/tmp/', "inscriptions.txt");
$zip->close();
}
答案 2 :(得分:2)
ZipArcive :: extractTo区分大小写。如果要提取的文件名不完全符合压缩,则该方法返回false。
答案 3 :(得分:2)
我遇到了同样的问题,我已经解决了这个问题:)
使用$_SERVER['DOCUMENT_ROOT']
作为网址。
我的代码(codeigniter):
$this->load->library('unzip');
$file = $this->input->GET('file');
$this->unzip->extract($_SERVER['DOCUMENT_ROOT'].'/TRAS/application/uploads/' . $file,$_SERVER['DOCUMENT_ROOT'].'/TRAS/application/views/templates/' . $file);
答案 4 :(得分:1)
如果$res
等于11,则表示ZipArchive
无法打开指定的文件。
测试一下:
$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);
if($res == ZipArchive::ER_OPEN){
echo "Unable to open $archive\n";
}
答案 5 :(得分:0)
添加文档根目录对我也有用。这是我的代码
$zip = new ZipArchive;
if ($zip->open($_SERVER['DOCUMENT_ROOT'].'/'.$folder.$file_path) === TRUE) {
$zip->extractTo($_SERVER['DOCUMENT_ROOT'].'/$folder');
$zip->close();
echo 'ok';
}
答案 6 :(得分:0)
我遇到同样的问题,但我可以打开zip文件,打开后返回true
。
我的问题是$zip->extractTo()
之后我弄错了。
在zip文件中删除以CHINESE(NO-ENGILISH)命名的文件后,我终于成功了。
答案 7 :(得分:-1)
在Windows 10上,我也遇到了同样的问题。我发现的唯一解决方案是,即使open()成功了,也尝试两次尝试extractTo:
$zip = new ZipArchive;
if ($open === true) {
$result = $zip->extractTo($destination);
if ($result === false) {
$result = $zip->extractTo($destination);
}
$zip->close();
}
第二个extractTo()起作用(没有干预动作)的事实似乎表明归档文件或目标目录没有问题。