-1

この質問が忍者にとって明らかである場合は申し訳ありませんが、私はPHPの初心者であり、一日中苦労しています..

フォルダー構造からすべてのファイルのリストを取得しようとしています。

現在、それは私に次のようなものを与えます

Array([0]->path/filename [1]->path/filename) Array([0]->path/filename [1]->path/filename..)

(フォルダごとに 1 つ)

function o99_list_all_files_in_dir($dir) //need to ocheck for server compatibility (unix,linux,win)
{ 

    $root = scandir($dir); 
    foreach($root as $value) 
    { 
        if($value === '.' || $value === '..') {continue;} 

        if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;} 

    //if(is_file("$dir/$value")) {$result["$dir"]="$value";continue;} 

        foreach(k99_list_all_files_in_dir("$dir/$value") as $value) 
        { 
            $result[]=$value; 

        //$result["$dir"]=$value; 
        }
    } 

    //print_r($result);
    return $result; 
} 

いくつかの質問:

1-パスとファイル名のペアの両方が必要なので、次のような配列を取得すると考えました:

results([パス] -> [ファイル名] [別のパス] -> [別のファイル名])。

しかし、別の配列を構築しようとすると (コメント解除行とコメント行を切り替える)、関数は各ディレクトリの最初のファイルのみを提供します。

2-後で、パスとファイル名の両方を分離するためにこの関数を使用しているので、これを試しました:

$result = o99_list_all_files_in_dir($upload_dir);   
                foreach ($result as $image) {
                 reset($image);
                 while (list($key, $val) = each($image)) {
                    // echo "$key => $val\n";
                 }
                $filename = pathinfo($image);// I need the path here ...
                         ...

...しかし、明らかに機能していません(そうでなければ、私はここにいません:-)

3 - おまけの質問: 結果からファイル (たとえば、thumbs.db など) をフィルター処理したり、特定の拡張子を無視するかどうかを決定したりするにはどうすればよいですか??

編集 I 4 - !重要 (前に忘れていた) - 未知のサーバー パス (Linux、Win、Unix) を扱う場合、何に注意する必要がありますか? ...この機能はすべてで機能しますか?

4

1 に答える 1

1

このコードを試してください:

function scanFileNameRecursivly($path = '', &$name = array() )
{
  $path = $path == ''? dirname(__FILE__) : $path;
  $lists = @scandir($path);

  if(!empty($lists))
  {
      foreach($lists as $f)
      { 
          if(is_dir($path.DIRECTORY_SEPARATOR.$f) && $f != ".." && $f != ".")
          {
              scanFileNameRecursivly($path.DIRECTORY_SEPARATOR.$f, &$name); 
          }
          else
          {
              $name[] = $path.DIRECTORY_SEPARATOR.$f;
          }
      }
  }
  return $name;
}

$path = "abs path to your directory";
$file_names = scanFileNameRecursivly($path);

echo "<pre>";
var_dump($file_names);
echo "</pre>";
于 2012-07-29T11:43:37.877 に答える