2011-06-20 10 views
0

可能性の重複:
php scandir --> search for files/directoriesphpを使ってすべての.mファイルをスキャンするには?

私はこのフォルダ内に、フォルダを持っているが、多くのサブフォルダがありますが、私はすべてのサブフォルダをスキャンし、すべての.mファイルをスキャンしたいと思います...どうすればいい?

/MyFilePath/ 
      /myPath.m 
      /myPath2.m 
      /myPath3.m 
      /MyClasses/ 
        /my.m 
        /my1.m 
        /my2.m 
        /my3.m 
        /Utilities/ 
           /u1.m 
           /u2.m 
           /External/ 
             /a.m 
             /b.m 
             /c.m 
           /Internal/ 
             /d.m 
             /e.m 
             /f.m 
        /Views/ 
          /a_v.m 
          /b_v.m 
          /c_v.m 
        /Controllers/ 
           /a_vc.m 
           /b_vc.m 
           /c_vc.m 
      /AnotherClasses/ 
         /anmy.m 
         /anmy1.m 
         /anmy2.m 
         /anmy3.m 
        /Networking/ 
           /net1.m 
           /net2.m 
           /net3.m 
           /External/ 
           /Internal/ 
        /Views/ 
        /Controllers/ 
+0

を:

$directories = new RecursiveDirectoryIterator('path/to/search'); $flattened = new RecursiveIteratorIterator($directories); $filter = new RegexIterator($flattened, '/\.in$/'); foreach ($filter as $file) { echo $file, PHP_EOL; } 

もっとに関する情報(ほとんどが不完全):迅速かつ基本的な例は次のようになります。 .mファイル "? .mファイルのリストを表示するか、ファイルの内容を確認しますか? .mファイルは、あなたが指定した任意のフォルダに置くことができますか? – Mattis

+0

申し訳ありません、更新中.... – Tattat

答えて

0

あなたは、この上の詳細については、PHPのドキュメントに目を向けることになるでしょう:ここ

はファイルですhttp://php.net/manual/en/function.readdir.php

は、ここであなたが欲しい何をすべき例です。サブディレクトリ内のすべての.mファイルの配列を返します。それはあなたが興味のあるものをされている場合は、その後、それぞれのファイルをループして、内容を読み取ることができます

<?php 
function get_m_files($root = '.'){ 
    $files = array(); 
    $directories = array(); 
    $last_letter = $root[strlen($root)-1]; 
    $root = ($last_letter == '\\' || $last_letter == '/') ? $root : $root.DIRECTORY_SEPARATOR; 

    $directories[] = $root; 

    while (sizeof($directories)) { 
    $dir = array_pop($directories); 
    if ($handle = opendir($dir)) { 
     while (false !== ($file = readdir($handle))) { 
     if ($file == '.' || $file == '..') { 
      continue; 
     } 
     $file = $dir.$file; 
     if (is_dir($file)) { 
      $directory_path = $file.DIRECTORY_SEPARATOR; 
      array_push($directories, $directory_path); 
     } elseif (is_file($file)) { 
      if (substr($file, -strlen(".m")) == ".m") { 
       $files[] = $file; 
      }    
     } 
     } 
     closedir($handle); 
    } 
    } 

    return $files; 
} 
?> 
+0

あまりにも複雑です – Gordon

+0

また、これには 'file.moo'や' so.m.txt'のようなファイルは含まれませんか? – Svish

+0

@スヴィッシュありがとう。私はそれを修正したと思う。 – jncraton

1
function ScanForMFiles($dir){ 

    $return = array(); 
    if ($handle = opendir($dir)) { 
     while (false !== ($file = readdir($handle))) { 

      if ($file != "." && $file != "..") { 
       if(is_dir($dir.$file)){ 
        $return = array_merge($return, ScanForMFiles($dir.$file."/")); 
       } 
       else { 
        if(substr($file, -2) == '.m') 
         $return[] = $file; 
       } 
      } 
     } 

     closedir($handle); 
    } 

    return $return; 

} 

var_dump(ScanForMFiles('./')); 
1

あなたはこのような再帰関数を使用することができます。

function searchFiles($dir,$pattern,$recursive=false) 
{ 
    $matches = array(); 

    $d = dir($dir); 
    while (false !== ($entry = $d->read())) 
    { 
     if (is_dir($d->path.$entry) && $recursive) 
     { 
      $subdir = $d->path.$entry; 
      $matches = array_merge($matches,searchFiles($dir,$pattern,$recursive)); 
     } 
     elseif (is_file($d->path.$entry) && preg_match($pattern,$entry)) 
     { 
      $matches[] = $d->path.$entry; 
     } 
    } 
    $d->close(); 
    return $matches; 
} 

使用方法:

$matches = searchFiles("/mypath/","'[.]m$'i",true); 
関連する問題