在使用PHP提取之前从zip中删除文件
我正在使用PHP上传一个zip文件并将其解压缩。我的验证脚本有问题,刚刚发现问题出在在使用PHP提取之前从zip中删除文件,php,zip,Php,Zip,我正在使用PHP上传一个zip文件并将其解压缩。我的验证脚本有问题,刚刚发现问题出在Thumbs.db文件上,windows创建这些文件是为了改进缓存。如何在提取之前删除这些文件 下面是我的尝试,但在提取时,其他文件也被删除。我尝试使用了deleteIndex()和deleteName(),但得到了相同的结果。如果我注释掉删除Thumbs.db文件的行,我不会遇到意外删除的文件。Mysyslog()行仅表示正在删除Thumbs.db文件 <?php $zip = new ZipArchiv
Thumbs.db
文件上,windows创建这些文件是为了改进缓存。如何在提取之前删除这些文件
下面是我的尝试,但在提取时,其他文件也被删除。我尝试使用了deleteIndex()
和deleteName()
,但得到了相同的结果。如果我注释掉删除Thumbs.db文件的行,我不会遇到意外删除的文件。Mysyslog()
行仅表示正在删除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);
}
}
if($zip->open($\u文件['upload\u文件]['tmp\u名称]])==true){
对于($i=0;$i<$zip->numFiles;$i++){
...
}
$zip->close();
如果($zip->open($\u文件['upload\u文件]['tmp\u名称]])==true){
$zip->extractTo($myPath);
}
}
我相信你的例子$zip->extractTo($myPath)代码>返回false
在您的特定情况下,使用系统实用程序解包归档文件,然后使用删除文件可能会更简单 谢谢你,亚历克斯。我开始想我可能需要先关上它。我回家后会测试一下。为什么你认为它会更简单?在解包之前,我需要/希望对文件进行迭代,以确保只包含适当的文件。解压
、查找
、和rm
正是为此目的编写的。我只看到了两种php脚本可能有优势的情况:在windows主机上运行,或者有复杂的逻辑来选择文件。谢谢!需要在提取之前关闭并重新打开。我同意使用操作系统可能比使用PHP更有效,但可能更难维护。