【PHP8.x】DirectoryIterator::getFileInfo()メソッドの使い方
getFileInfoメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getFileInfoメソッドは、現在イテレータが指しているファイルまたはディレクトリに関する詳細情報を提供するメソッドです。このメソッドはPHPのDirectoryIteratorクラスに属しており、ファイルシステム内の各エントリの具体的な情報にアクセスするために利用されます。
getFileInfoメソッドを実行すると、SPLFileInfoクラスのオブジェクトを返します。このオブジェクトからは、対象ファイルのパス、ファイル名、サイズ、更新日時、パーミッション、タイプ(ファイルかディレクトリか)など、多岐にわたる詳細な情報を取得できます。これにより、ファイルシステムを走査して特定の条件に合致するファイルを検索したり、ファイルの属性に基づいて処理を分岐させたりする際に、効率的に情報を取り扱うことが可能になります。
システムエンジニアを目指す初心者にとって、ファイル操作は基本的なスキルです。本メソッドは、ファイルの情報を安全かつプログラム的に取得する重要な手段であり、正確なファイル情報を基に適切な処理を行うための基礎ツールとして、実務で頻繁に活用されます。
構文(syntax)
1<?php 2$iterator = new DirectoryIterator('.'); 3$fileInfo = $iterator->getFileInfo(); 4?>
引数(parameters)
?string $class = null
- ?string $class: DirectoryIterator::getFileInfo() が返すファイル情報を格納するクラス名。指定しない場合は
SplFileInfoオブジェクトが返されます。
戻り値(return)
SplFileInfo
DirectoryIterator::getFileInfo() メソッドは、現在のディレクトリ内のエントリを表す SplFileInfo オブジェクトを返します。このオブジェクトを使用すると、ファイル名、サイズ、タイムスタンプなどのファイルに関する詳細情報を取得できます。
サンプルコード
DirectoryIterator::getFileInfo()でファイル情報を取得する
1<?php 2 3/** 4 * DirectoryIterator::getFileInfo() メソッドの使用例を示します。 5 * 指定されたディレクトリ内の各エントリ(ファイルまたはサブディレクトリ)について、 6 * その詳細なファイル情報を取得し、表示します。 7 * 8 * システムエンジニアを目指す初心者の方へ: 9 * このコードは、特定のディレクトリの中身を調べて、 10 * それぞれがファイルなのかディレクトリなのか、名前は何か、といった情報を得る方法を示しています。 11 * `DirectoryIterator`は、ディレクトリ内の要素を一つずつ順番に見ていくための道具です。 12 * `getFileInfo()`は、今見ている要素に関するより詳しい情報(`SplFileInfo`オブジェクト)を 13 * 取り出すために使われます。 14 */ 15 16// 対象とするディレクトリのパスを設定します。 17// __DIR__ は、このスクリプトが置かれているディレクトリの絶対パスを指します。 18$targetDirectory = __DIR__; 19 20echo "--- ディレクトリ: {$targetDirectory} のファイル情報一覧 ---\n"; 21echo "---------------------------------------------------\n"; 22 23try { 24 // DirectoryIterator のインスタンスを作成します。 25 // これにより、$targetDirectory 内の各ファイルやサブディレクトリを順に処理できるようになります。 26 $iterator = new DirectoryIterator($targetDirectory); 27 28 // ディレクトリ内の各エントリ(ファイルやディレクトリ)をループ処理します。 29 // $entry は DirectoryIterator のオブジェクトで、現在のエントリを表します。 30 foreach ($iterator as $entry) { 31 // DirectoryIterator::getFileInfo() メソッドを呼び出し、 32 // 現在のエントリに関する SplFileInfo オブジェクトを取得します。 33 // SplFileInfo オブジェクトは、ファイル名、パス、サイズ、最終変更日時など、 34 // ファイルに関する豊富な情報を提供します。 35 $splFileInfo = $entry->getFileInfo(); 36 37 // 取得した SplFileInfo オブジェクトから情報を取得し、表示します。 38 $type = '不明'; 39 if ($splFileInfo->isDir()) { 40 $type = 'ディレクトリ'; // エントリがディレクトリの場合 41 } elseif ($splFileInfo->isFile()) { 42 $type = 'ファイル'; // エントリがファイルの場合 43 } 44 45 $name = $splFileInfo->getFilename(); // ファイル名またはディレクトリ名 46 $path = $splFileInfo->getPathname(); // ファイルまたはディレクトリのフルパス 47 $size = $splFileInfo->isFile() ? $splFileInfo->getSize() . ' バイト' : '-'; // ファイルサイズ (ディレクトリの場合は'-') 48 49 // 取得した情報を整形して出力します。 50 echo "タイプ: {$type}, 名前: {$name}, フルパス: {$path}, サイズ: {$size}\n"; 51 } 52 53 echo "---------------------------------------------------\n"; 54 55} catch (UnexpectedValueException $e) { 56 // 指定されたディレクトリが存在しない、またはアクセス権がない場合に発生するエラーです。 57 echo "エラー: 指定されたディレクトリが見つからないか、アクセスできません。\n"; 58 echo "詳細: " . $e->getMessage() . "\n"; 59} catch (Exception $e) { 60 // その他の予期せぬエラーが発生した場合にキャッチします。 61 echo "予期せぬエラーが発生しました。\n"; 62 echo "詳細: " . $e->getMessage() . "\n"; 63} 64 65?>
PHPのDirectoryIterator::getFileInfo()メソッドは、DirectoryIteratorが現在指しているファイルやディレクトリに関する詳細な情報を取得するために使用されます。DirectoryIteratorは、指定されたディレクトリ内の各エントリ(ファイルまたはサブディレクトリ)を順に処理するためのクラスです。
このメソッドは、引数としてオプションでSplFileInfoのサブクラスを指定できますが、何も指定しない場合はデフォルトでSplFileInfoオブジェクトを返します。戻り値であるSplFileInfoオブジェクトは、ファイル名、パス、サイズ、最終変更日時、種類(ファイルかディレクトリか)など、ファイルやディレクトリに関する豊富な情報を提供します。
サンプルコードでは、まず対象ディレクトリのDirectoryIteratorを作成し、foreachループでディレクトリ内の各エントリを順に処理します。ループ内で各エントリに対してgetFileInfo()を呼び出し、その詳細情報を持つSplFileInfoオブジェクトを取得しています。その後、SplFileInfoオブジェクトのisDir()やisFile()メソッドでエントリの種類を判断し、getFilename()、getPathname()、getSize()などのメソッドを使って具体的な情報を抽出し、整形して出力しています。このコードは、ファイルシステムをプログラムから操作し、ディレクトリの内容を調査する基本的な手法を示しています。
getFileInfo() メソッドは、引数を指定しない場合、デフォルトで汎用的なファイル情報オブジェクトである SplFileInfo を返します。特定のカスタムファイル情報クラスを使いたい場合は、そのクラス名を文字列で引数に渡すことで指定が可能です。この SplFileInfo オブジェクトには、ファイル名、パス、種類、サイズ、最終更新日時など、ファイルやディレクトリに関する非常に多くの詳細情報が格納されており、サンプルコードで示されたメソッド以外にも、多様な情報取得メソッドが利用できます。
また、DirectoryIterator を初期化する際、指定したディレクトリが存在しない場合や、読み取り権限がない場合は UnexpectedValueException が発生する可能性があります。そのため、サンプルコードのように必ず try-catch ブロックでエラーを適切に捕捉し、安全に処理する仕組みを組み込むようにしてください。__DIR__ はスクリプトの配置場所を示しますが、実際のアプリケーションでユーザー入力などからパスを扱う際は、パスの正当性検証やセキュリティ対策にも十分注意が必要です。