こんにちは、Ryohei(@ityryohei)です!

本記事では、PHPのscandirを使って指定したディレクトリ内に存在するファイル・ディレクトリ一覧を取得する方法をご紹介しています。

PHPのscandirでディレクトリ内のファイル・ディレクトリ一覧を取得したいんだけど、良い方法ないかな?

上記の疑問にお答えします。

では、解説していきます。

scandirとは

scandirは、指定したサーバーパスのファイル・ディレクトリ一覧を取得する関数です。関数を実行すると、ファイル・ディレクトリ一覧の配列を返します。

構文

<?php

scandir($directory, $sorting_order, $context);

パラメータ

directory 対象のディレクトリのサーバーパスを指定します。
sorting_order取得した一覧のソート順を指定します。デフォルトはアルファべと昇順、1を指定するとアルファベット降順になります。
contextcontextパラメータについてはこちらをご参照ください。

参考:https://www.php.net/manual/ja/function.scandir.php

scandirで指定したディレクトリ内のファイル・ディレクトリ一覧を取得する

scandirで指定したディレクトリ内のファイル・ディレクトリ一覧を取得してみます。ディレクトリの構成は下記の通りです。index.phpでscandirを実行し、結果を確認してみます。

ディレクトリ構成

dir/
 ├ index.php →実行ファイル
 └ subdir/ →ディレクトリ
     └ test4.php →ファイル
 ├ test1.php →ファイル
 ├ test2.php →ファイル
 ├ test3.php →ファイル

PHP

<?php

$dir = __DIR__;
$files = scandir($dir);

var_dump($files);

実行結果

array(7) {
  [0]=>
 string(1) "."
  [1]=> string(2) ".."
  [2]=> string(9) "index.php"
  [3]=> string(4) "test"
  [4]=> string(9) "test1.php"
  [5]=> string(9) "test2.php"
  [6]=> string(9) "test3.php"
}

実行結果を確認すると、ディレクトリ内に存在するファイト・ディレクトリの配列を取得することができています。subdir(サブディレクトリ)の内容は取得できていないため、サブディレクトリの内容も取得する場合は追加で処理を組む必要があります。is_dir関数でディレクトリを判定することができるため、対象がディレクトリであれば再度scandirを実行するという処理で対応できるかと思います。

最後に

PHPでは、scandirを使って簡単に指定したディレクトリ内のファイル・ディレクトリ一覧を取得することができます。他の組み込み関数と組み合わせることでディレクトリを辿って深い階層のディレクトリに存在するファイル一覧まで取得することができます。自身のWebサイト・アプリの全体のディレクトリ構成を取得するスクリプトを作ってみて、ディレクトリ関連の組み込み関数のマスターを目指しすのも良いかもしれませんね!

以上、PHPのscandirでディレクトリ内のファイル・ディレクトリ一覧を取得する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。