如何仅提取图像文件并删除文件的其余部分

问题描述:

我试图提取我的服务器上的zip文件,有时这些文件包含MAC_STORE和其他格式,用户不应放入zip文件。如何仅提取图像文件并删除文件的其余部分

这里是我试过

public static function extractItem($path, $ext_path) { 
     $zip = new ZipArchive; 

     $zip->open($path); 
     $filename = array(); 

    for ($i = 0; $i < $zip->numFiles; $i++) { 
     $stat = $zip->statIndex($i); 
     if ($stat['size'] != 0) { 
      $filename[] = basename($stat['name']); 
     } 
    } 
    } 

如果zip文件包含JPG格式,JPEG,PNG那么也没关系,如果它包含其他格式我要删除它们

这里是的$filename array

Array 
(
    [0] => Screen Shot 2017-10-04 at 12.38.47 AM.png 
    [1] => ._Screen Shot 2017-10-04 at 12.38.47 AM.png 
    [2] => Screen Shot 2017-10-04 at 12.38.50 AM.png 
    [3] => ._Screen Shot 2017-10-04 at 12.38.50 AM.png 
) 

响应在zip文件中只有两个图像

+0

什么' PHP_EOL'在那里做?文件名不是文本文件...你在哪里检查代码中的文件扩展名? – arkascha

你可以仅仅只提取文件与.jpg格式,JPEG,PNG延伸,在这里解释: php zipArchive unzip only certain extensions

但是,你会用这个代替替换正则表达式取景器:

preg_match('#.+([jpg|jpeg|png])$#i', $entry) 
+0

我的zip文件中有两个文件,循环运行四次? – user8740586