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);

第2パラメータの定数は以下の3種類から指定します。
指定しなかったときは初期値のSCANDIR_SORT_ASCENDINGが適用されます。

定数名並び順
SCANDIR_SORT_ASCENDINGアルファベット昇順
SCANDIR_SORT_DESCENDINGアルファベット降順
SCANDIR_SORT_NONE並び替えなし

使用例

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つずつ出力しますが、正規表現で「.」や「..」のような余計なファイルは出力しないように設定しています。

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

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

コメントありがとうございます!
運営の参考にさせていただきます。