在使用 PHP 解压缩之前从 zip 中删除文件
Delete files from zip prior to extracting using PHP
我正在使用 PHP 上传 zip 文件并解压缩。我的验证脚本有问题,刚刚发现罪魁祸首是 windows 创建的 Thumbs.db
文件以改进缓存。如何在解压前删除这些文件?
下面是我的尝试,但是解压的时候其他文件也被删除了。我试过同时使用 deleteIndex()
和 deleteName()
,但得到的结果相同。如果我注释掉删除 Thumbs.db 文件的行,我不会遇到意外删除的文件。我的 syslog()
行仅表示正在删除 Thumbs.db 个文件。
<?php
$zip = new ZipArchive();
if ($zip->open($_FILES['upload_file']['tmp_name']) === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
//Validate files
$name=$zip->getNameIndex($i);
$pieces=explode(DIRECTORY_SEPARATOR,$name);
if($pieces[count($pieces)-1]=='Thumbs.db'){
//Delete windows created thumb.db files
syslog(LOG_INFO,'delete file '.$name.' with index '.$i);
$zip->deleteIndex($i); //If commented out, I do not experience the wrong files being deleted
//Also deletes wrong files: $zip->deleteName($name);
}
}
$zip->extractTo($myPath);
}
?>
在文件操作后关闭存档并在解压前重新打开它:
if ($zip->open($_FILES['upload_file']['tmp_name']) === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
...
}
$zip->close();
if ($zip->open($_FILES['upload_file']['tmp_name']) === true) {
$zip->extractTo($myPath);
}
}
我相信你的榜样$zip->extractTo($myPath);
return false
.
在您的特定情况下,使用系统实用程序解压缩存档然后使用 find 删除文件可能更简单。
我正在使用 PHP 上传 zip 文件并解压缩。我的验证脚本有问题,刚刚发现罪魁祸首是 windows 创建的 Thumbs.db
文件以改进缓存。如何在解压前删除这些文件?
下面是我的尝试,但是解压的时候其他文件也被删除了。我试过同时使用 deleteIndex()
和 deleteName()
,但得到的结果相同。如果我注释掉删除 Thumbs.db 文件的行,我不会遇到意外删除的文件。我的 syslog()
行仅表示正在删除 Thumbs.db 个文件。
<?php
$zip = new ZipArchive();
if ($zip->open($_FILES['upload_file']['tmp_name']) === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
//Validate files
$name=$zip->getNameIndex($i);
$pieces=explode(DIRECTORY_SEPARATOR,$name);
if($pieces[count($pieces)-1]=='Thumbs.db'){
//Delete windows created thumb.db files
syslog(LOG_INFO,'delete file '.$name.' with index '.$i);
$zip->deleteIndex($i); //If commented out, I do not experience the wrong files being deleted
//Also deletes wrong files: $zip->deleteName($name);
}
}
$zip->extractTo($myPath);
}
?>
在文件操作后关闭存档并在解压前重新打开它:
if ($zip->open($_FILES['upload_file']['tmp_name']) === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
...
}
$zip->close();
if ($zip->open($_FILES['upload_file']['tmp_name']) === true) {
$zip->extractTo($myPath);
}
}
我相信你的榜样$zip->extractTo($myPath);
return false
.
在您的特定情况下,使用系统实用程序解压缩存档然后使用 find 删除文件可能更简单。