根据文件名排除某些文件

时间:2014-07-28 06:31:15

标签: php file directory

所以我有一个代码片段,它读取目录并对内部文件执行某些操作。我有一系列要排除的文件名。我的代码如下所示:

$excluded = array(".","..","thumbs.db");

if($fh = @opendir($dir)) 
{
    while(false !== ($file = @readdir($fh))) 
    {
       if(in_array(strtolower($file),$excluded))
       {
          continue;
       }
       //do processing here...

现在,我想要也应该排除zip文件。由于我不知道它们可能存在的名称,因此我需要根据扩展名跳过它们。

现在我知道我可以分割文件名并查看最后一个元素以查看它是否有拉链等,但我想问的是,有没有办法在已编码的内容的约束下实现它 - 比如添加就像这样,然后调整循环来处理它......

 $excluded = array(".","..","thumbs.db","*.zip");

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

$excluded = array(".","..","thumbs.db");
$excludedExtensions = array(".zip",".rar");

if($fh = @opendir($dir)) 
{
    while(false !== ($file = @readdir($fh))) 
    {
       if(in_array(strtolower($file),$excluded) || 
          in_array(strtolower(substr($file, -4)), $excludedExtensions) )
       {
          continue;
       }
       //do processing here...

它并不完全是您正在寻找的东西,但我认为不可能以您想要的方式行事:(

-------------------------------------------- -----------------------------------------

修改

我想做一个更可靠的方法,因为有些文件在其扩展名中有4个甚至5个字母。看完PHP手册后,我发现了这个:

$excluded = array(".","..","thumbs.db");
$excludedExtensions = array(".zip",".rar", ".7z", ".jpeg", ".phtml");

if($fh = @opendir($dir)) 
{
    while(false !== ($file = @readdir($fh))) 
    {
       $path_parts = pathinfo($file);

       if(in_array(strtolower($file),$excluded) ||
          in_array(strtolower($path_parts['extension'])) )
       {
          continue;
       }
       //do processing here...

在此处查看更多内容:PHP manual: pathinfo