我正在使用PHP上传zip文件并将其解压缩。我的验证脚本出现问题,刚刚发现罪魁祸首是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);
}
?>
答案 0 :(得分:1)
在文件操作后关闭存档,并在解压缩之前重新打开它:
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);
返回false
。
在您的特定情况下,使用系统实用程序解压缩存档然后使用find删除文件可能更简单。