問題
PHPでディレクトリ内のファイルリストを更新日時順で取得するには?
解決策
- ファイル名格納用の配列とファイルの更新日時格納用の配列を用意します。
- 「opendir」でディレクトリハンドルを取得します。
- 「readdir」でディレクトリ内のファイル名を順に取得していきます。
- ファイル名を配列に格納し、さらに「filetime」でファイルの更新日時を取得して別の配列に格納します。
- 「closedir」でディレクトリハンドルを閉じた後、「array_multisort」で更新日時をキーとして、ファイル名の配列をソートします。
PHPでディレクトリ内のファイルリストの順番を入れ替える。
PHPでディレクトリ内のファイルリストを更新日時順で取得する方法をご紹介します。
事前準備として、配列を用意します。
事前準備として、ファイル名格納用の配列とファイルの更新日時格納用の配列を用意します。
$file_list = array(); //ファイル名を格納する配列
$time_list = array(); //各ファイルの更新日付を格納する配列
ディレクトリハンドルを取得します。
対象のディレクトリを参照するため、そのディレクトリのディレクトリハンドルを「opendir」で取得します。
$folderPath = "フォルダパス";
$dir = opendir($folderPath);
ディレクトリ内のファイルにアクセスし、各配列にデータを格納します。
ディレクトリ内のファイルにアクセスし、各配列にデータを格納します。
- 先頭文字が”.”または”..”以外のファイルに対して処理を行います。
- 「readdir」でファイル名を取得し、ファイル名格納用の配列に格納します。
- 「filetime」でファイルの更新日時を取得して、ファイル更新日時格納用の配列に格納します。
while (false !== ($file = readdir($dir))){ //ディレクトリ内のファイルを参照
//先頭文字が"."または".."のファイルを除外
if($file[0] != "." && $file[0] != ".."){
$time_list[] = filemtime($folderPath.$file); //ファイルの更新日付を配列に格納する
$file_list[] = $file; //ファイル名を配列に格納する
}
}
ディレクトリハンドルを閉じます。
「closedir」でディレクトリハンドルを閉じます。
closedir($dir);
更新日時の配列を元に、ファイル名の配列をソートします。
「array_multisort」を使って、更新日時の配列を元に、ファイル名の配列をソートします。
// array_multisort('ソートを行う配列','ソート順','合わせてソートさせたい配列');
array_multisort($time_list,SORT_DESC,$file_list); //更新日付でソート
参考ページ
以下のサイトが、より詳しく解説してくれています。
【ファイルを更新日付順でソートする | PHP | kido Tech Blog】
https://kido0617.github.io/php/2013-01-06-file-sort-by-created/
【PHP: array_multisort – Manual】
https://www.php.net/manual/ja/function.array-multisort.php
【PHP: readdir – Manual】
https://www.php.net/manual/ja/function.readdir.php#refsect1-function.readdir-seealso
【PHP: filemtime – Manual】
https://www.php.net/manual/ja/function.filemtime.php
コメント