2017-10-10 12 views
1

私が試した次のコードを参照してください。サブディレクトリ内のファイルと一緒にディレクトリとサブディレクトリのリストを印刷する方法

echo scanDirectoryImages("Images"); 


function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 
'gif', 'png')) 
{ 

$html = ''; 
if (
    is_readable($directory) 
    && (file_exists($directory) || is_dir($directory)) 
) { 
    $directoryList = opendir($directory); 
    while($file = readdir($directoryList)) { 
     if ($file != '.' && $file != '..') { 
      $path = $directory . '/' . $file; 
      if (is_readable($path)) { 
       if (is_dir($path)) { 
        return scanDirectoryImages($path, $exts); 
       } 
       if (
        is_file($path) 
        && in_array(end(explode('.', end(explode('/', $path)))), 
$exts) 
       ) { 
        $html .= '<img src="' . $path 
         . '" style="max-height:200px;max-width:200px" 
value="<?php echo basename($path)"/> '; 
       } 
      } 
     } 
    } 
    closedir($directoryList); 
} 
return $html; 
} 

私のサブディレクトリからのイメージだけが返されますが、実際にはサブディレクトリのパスは表示されません。 また、$ pathを設定するための問題を引き起こしているlocalhostではなく、サーバーで作業しています。 助けてください!

+1

これは再帰関数です。そして、パラメータ( 'jpeg'、 'jpg'、 'png'、 'gif')を使って関数を呼び出すと、画像のみが表示されます。 あなたがしなければならないことは、貼り付けコードをコピーするのではなく、それを理解して変更してニーズに合うようにすることです。 'if(is_dir($ path)){ return scanDirectoryImages($ path、$ exts); } 'はあなたにとって重要なポイントです。正しい方向に向けるだけで – Nico

答えて

2

ディレクトリから特定の拡張子を持つすべてのファイルを取得する簡単な方法をお伝えしたいと思います。

これは、さまざまなIteratorsの使用やフィルタ

FilterIterator::accept()になりますが、ファイルが反復に含まれているためのルールです。

class ImagesOnlyFilterIterator extends FilterIterator 
{ 
    function accept() 
    { 
    return in_array(strtolower($this->current()->getExtension()), array('jpeg', 'jpg', 'gif', 'png', 'bmp', 'tif', 'tiff'), true); 
    } 
} 

$path = '/foo/bar/whatever'; 

foreach(new ImagesOnlyFilterIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path))) as $image) 
{ 
    echo $image . PHP_EOL; 
} 

$image実際SplFileInfo対象となり、あなたが使用する他のさまざまなプロパティが含まれます。

+1

はin_arrayの厳密なモードを使います。 https://eval.in/89008/ https://www.reddit.com/r/lolphp/comments/1v7ek6/in_which_in_array_does_crazy_stuff/ – hanshenrik

+0

@hanshenrik strtolowerでラップされたgetExtensionは文字列を返すだけなので、ここで問題はないかもしれません。しかし、それを追加して幸せ。 – Scuzzy

関連する問題