【问题标题】:Find all files and filenames in a directory that match a substring查找目录中与子字符串匹配的所有文件和文件名
【发布时间】:2010-01-07 00:43:22
【问题描述】:

我正在遍历目录中的文件列表,我想将我拥有的子字符串与文件名匹配。如果文件名包含子字符串,则返回该文件名,以便我可以删除它。我已经完成了以下操作,它只是返回了所有内容:

while ($file = readdir($dir_handle)) { 

        $extension = strtolower(substr(strrchr($file, '.'), 1)); 
        if($extension == "sql" || $extension == "txt" ) {

            $pos = strpos($file, $session_data['user_id']);

            if($pos === true) {
                //unlink($file);
                echo "$file<br />"; 
            }else {
                // string not found
            }   
        }
} 

我做错了什么?

感谢大家的帮助

【问题讨论】:

    标签: php regex


    【解决方案1】:

    strpos 返回一个整数或 FALSE。您需要将测试更新为

    $pos !== FALSE 
    

    然后 - 如果您想删除文件,您可以取消注释 unlink() 调用。我不确定您所说的“返回以便我可以删除”是什么意思。

    【讨论】:

    • 太棒了!我没有尝试这种组合! :P
    【解决方案2】:

    假设您使用的是 Linux,您可以使用带有 GLOB_BRACE 选项的 [glob()][1] 函数来执行此操作:

    $files = glob('*.{sql,txt}', GLOB_BRACE);
    

    你也可以在那里混入 user_id。

    不确定它是否适用于 Windows。请参阅 http://de.php.net/glob 并注意有关 GLOB_BRACE 选项的说明。

    【讨论】:

      【解决方案3】:
      if ($handle = opendir('/path/to/dir/') {
          $extensions = array('sql' => 1, 'txt' => 1);
          while (false !== ($file = readdir($handle))) { 
              $ext = strtolower(substr(strrchr($file, '.'), 1)); 
              if (isset($extensions[$ext]) && strpos($file, $session_data['user_id']) !== false)
                  echo "$file<br />"; 
              else
                  echo "no match<br />";
              }
          }
      } 
      

      【讨论】:

        【解决方案4】:

        您可以使用 SPL 递归地执行此操作

        foreach (new DirectoryIterator('/path') as $file) {
            if($file->isDot()) continue;
            $filename = $file->getFilename();
            $pathname = $file->getPathname();
            if ( strpos ($filename ,".sql") !==FALSE ) {
                echo "Found $pathname\n";
                $pos = strpos($filename, $session_data['user_id']);
                ......
                #unlink($pathname); #remove your file
            }
        }
        

        【讨论】:

          最近更新 更多