PHPプログラミング

レシピ

ファイル / ディレクトリ

ディレクトリ内のファイル一覧を取得する

scandir関数を使って、ディレクトリ内のファイル一覧を取得する方法について解説します。

この記事のポイント

  • ファイル一覧はアルファベット昇順・降順で取得できる
  • ディレクトリが読み取り権限のあるか確認する

目次

ディレクトリ内のファイルを配列形式で取得する

scandir関数に対象のディレクトリへのパスを渡すと、そのディレクトリ内のファイル一覧を配列形式で取得することができます。

コード例

scandir('./test/');

取得結果をvar_dump関数で出力すると次のようになります。

取得結果の例

array(5) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(8) "data.txt" [3]=> string(9) "data2.txt" [4]=> string(9) "data3.txt" }

取得するファイル一覧の並び順は、初期値ではアルファベット昇順です。
この並びは第2パラメータに定数を渡すとアルファベット降順に変更することができます。

コード例

scandir( './test/', SCANDIR_SORT_DESCENDING);

使用例

scandir関数は対象ディレクトリのパーミッションが読み取り可能である必要があります。
そこで、is_readable関数を使って読み込み可能かを確認してから、ファイル一覧を取得するコード例を紹介します。

コード例

// ディレクトリへのパス
$path = './test/';

// ディレクトリに読み取り権限があるか確認
if( is_readable($path) ) {

	// ディレクトリ内のファイルを取得
	$files = scandir($path);

	foreach( $files as $file_name ) {

		// 「.」「..」以外のファイルを出力
		if( !preg_match( '/^(\.|\.\.)$/', $file_name) ) {
			echo $file_name . ', ';
		}
	}

} else {
	echo 'ディレクトリの読み込み権限がありません。';
}

出力例

data.txt, data2.txt, data3.txt, data4.txt, 

is_readable関数で対象ディレクトリが読み取り可能であるかを確認し、可能な場合に限りscandir関数でファイル一覧を取得しています。

その後、foreach文の中で取得したファイル名を1つずつ出力しますが、正規表現で「.」や「..」のような余計なファイルは出力しないように設定しています。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。