PHPマニュアルサイト(ユーザー投稿)のサンプル関数を使ってみました。この関数は、サーバーの指定されたディレクトリにあるすべてのファイルおよび/またはフォルダーのネストされた配列を返すことになっています。
私はPHPを学んでいるので、何か間違ったことをしている可能性が高く、関数が機能しない可能性は低いと思います. しかし、以下の機能よりも簡単な方法があれば教えてください。
ベース パス内のすべてのファイルを反復してエコーできますが、サンプル サブフォルダー内のファイルはできません。サブフォルダーがあるべきインデックスは、使用するパラメーターに応じて、空白またはフォルダー名のみであり、配列ではありません。フォルダー名を取得できたら、false を返す is_array でテストしました。
関数は次のとおりです。
list_array: オプションですべてのファイル、ディレクトリのみ、またはファイル システム パスのファイルのみを含む配列を返します
@param $base_path 文字列 絶対パスまたは相対パス
@param $filter_dir boolean 結果からディレクトリをフィルターします ($recursive が true の場合、最後のディレクトリ以外は無視されます)
@param $filter_files boolean 結果からファイルをフィルター
@param $exclude string パイプで区切られた、常に無視するファイルの文字列
@param $recursive boolean ディレクトリを一番下に降ろしますか?
@return $result_list array ネストされた配列または false
function directory_list($directory_base_path, $filter_dir = false, $filter_files = false, $exclude = ".|..|.DS_Store|.svn", $recursive = true){ $directory_base_path = rtrim($directory_base_path, "/") . "/"; if (!is_dir($directory_base_path)){ error_log(__FUNCTION__ . "File at: $directory_base_path is not a directory."); return false; } $result_list = array(); $exclude_array = explode("|", $exclude); if (!$folder_handle = opendir($directory_base_path)) { error_log(__FUNCTION__ . "Could not open directory at: $directory_base_path"); return false; }else{ while(false !== ($filename = readdir($folder_handle))) { if(!in_array($filename, $exclude_array)) { if(is_dir($directory_base_path . $filename . "/")) { if($recursive && strcmp($filename, ".")!=0 && strcmp($filename, "..")!=0 ){ // prevent infinite recursion error_log($directory_base_path . $filename . "/"); $result_list[$filename] = directory_list("$directory_base_path$filename/", $filter_dir, $filter_files, $exclude, $recursive); }elseif(!$filter_dir){ $result_list[] = $filename; } }elseif(!$filter_files){ $result_list[] = $filename; } } } closedir($folder_handle); return $result_list; }
}
これは私が試した多くのことの1つです。配列には 5 つの要素が含まれていますが、そのうちの 4 つだけが表示されます。$array[4] のエコーは空白です。この時点で、ネストされた配列を取得しようとしています。しかし、それを繰り返す簡単な方法があれば、どんなヒントでも大歓迎です。
$directory_base_path = "../sandbox/";
$filter_dir = false;
$filter_files = false;
$exclude_files = ".|..|.DS_Store|dir_read_test.php";
$recursive = true;
$array = directory_list($directory_base_path, $filter_dir, $filter_files, $exclude_files, $recursive);
$array_length = count($array);
echo $array_length;
echo "<br/>";
$count = 0;
while ( $array_length >= $count ) {
echo $array[$count];
echo "<br/>";
$count = $count + 1;
}