2017-03-03 9 views
0

私は複数のサブフォルダを持っているのでstore_filesというフォルダを持っています。これで、すべてのフォルダとすべてのファイルを取得できます。今、私はすべてのフォルダを取得し、zipファイル以外は取得しません。私はファイルの拡張子がzipに等しいが、動作していないようだと条件を追加しようとします。 $ ext == 'zip'を出力に何も表示しないでください。画像で例えばありますように、特定のファイルを取得するための別の方法はありますglob($getDirectory. '*.zip')PHP:scandirを使用して複数のサブディレクトリからすべてのzipファイルを取得

   function listFolderFiles($dir){ 
        $ffs = scandir($dir); 
        echo '<ol>'; 
        foreach($ffs as $ff){ 
         $ext = pathinfo($ff, PATHINFO_EXTENSION); 

         if($ff != '.' && $ff != '..' && $ext == 'zip'){ 
          echo '<li>'; 
          $str = preg_replace('/\D/', '', $ff); 
          $str = substr($str, 0,-1); 

          $getYear = substr($str, 0,4); 
          $getMonth = substr($str, -4,2); 
          $getDay = substr($str, -2,2); 
          $theDate = $getYear.'-'.$getMonth.'-'.$getDay; 
          $theRealDate = date('Y M j', strtotime($theDate)); 
          echo $theRealDate; 


          if(is_dir($dir.'/'.$ff)){ 
          listFolderFiles($dir.'/'.$ff); 
          } 

          echo '</li>'; 
         } 

        } 
        echo '</ol>'; 
       } 
       listFolderFiles('store_files'); 
+1

なぜ 'glob()'を使わないのですか? – arkascha

+0

'glob()'は再帰的に動作しません。しかし、あなたは非常に簡単にそれの周りにラッパーを構築することができます。その答えを見てみましょう:http://stackoverflow.com/questions/17160696/php-glob-scan-in-subfolders-for-a-file – arkascha

+0

@arkaschaまたは単にsplイテレータを使用して – hassan

答えて

1

scandir()は、それ自身が再帰的なディレクトリ検索ではなく、指定されたディレクトリに直接ファイルとディレクトリをリストするという事実に起因すると思います。​​がディレクトリであることが検出された場合、あなたのlistFolderFiles()関数への再帰呼び出しで既にそれを考慮しています。しかし、あなたの問題は、以前のif文でディレクトリをすでにフィルタリングしてしまっていることです(ディレクトリが '.zip'で終わっていないと仮定します)。私は以下の関数があなたの後のものだと思います:

  function listFolderFiles($dir){ 
       $ffs = scandir($dir); 
       echo '<ol>'; 
       foreach($ffs as $ff){ 
        $ext = pathinfo($ff, PATHINFO_EXTENSION); 

        if($ff != '.' && $ff != '..' && (is_dir($dir.'/'.$ff) || $ext == 'zip')){ 
         echo '<li>'; 
         $str = preg_replace('/\D/', '', $ff); 
         $str = substr($str, 0,-1); 

         $getYear = substr($str, 0,4); 
         $getMonth = substr($str, -4,2); 
         $getDay = substr($str, -2,2); 
         $theDate = $getYear.'-'.$getMonth.'-'.$getDay; 
         $theRealDate = date('Y M j', strtotime($theDate)); 
         echo $theRealDate; 


         if(is_dir($dir.'/'.$ff)){ 
         listFolderFiles($dir.'/'.$ff); 
         } 

         echo '</li>'; 
        } 

       } 
       echo '</ol>'; 
      } 
      listFolderFiles('store_files'); 
+0

おかげさまで本当に助かりました –

1

私はglobを使用すると、このような状況のために適切であろうとは思わない:

$ffs = glob($dir . "/*/*.zip"); 

のみ取得しますzipファイル親ディレクトリではなく、サブディレクトリから取得します。あなたがRecursiveDirectoryIteratorを使用する必要があります

、これは、より適切な

$files = new RecursiveDirectoryIterator("./"); 
$iterator = new RecursiveIteratorIterator($files, RecursiveIteratorIterator::SELF_FIRST); 

foreach ($iterator as $file) { 
    if (false === strpos($file, '/.') && strpos($file, '.zip')) { 
     echo $file, "\n"; 
    } 
} 

になりますおかげでthis comment submitterに行きます。

関連する問題