Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】SplFileObject::getFileInfo()メソッドの使い方

getFileInfoメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getFileInfoメソッドは、現在扱っているファイルに関する詳細な情報を取得するメソッドです。このメソッドは、PHPでファイルやディレクトリをオブジェクトとして扱うことを可能にするSplFileObjectクラスに属しています。

getFileInfoメソッドを呼び出すと、現在開いているファイルや操作対象のディレクトリに関する属性情報をまとめたSplFileInfoクラスのオブジェクトを返します。このSplFileInfoオブジェクトを通じて、ファイルサイズ、最終更新日時、パーミッション、ファイルの種類(例えば、通常のファイル、ディレクトリ、シンボリックリンクなど)といった、多岐にわたるファイル情報をプログラムで簡単に取得できます。

この機能は、単にファイルの内容を読み書きするだけでなく、ファイルそのものの特性や状態を調べて、条件に応じた処理を実行したい場合に非常に有用です。例えば、特定のサイズのファイルだけを処理する、更新日時が最も新しいファイルを選択するといった、ファイル操作における高度な制御を実現するために活用されます。ファイルシステムの情報を効果的に利用するための重要なメソッドです。

構文(syntax)

1<?php
2// 一時ファイルを作成し、SplFileObjectインスタンスを生成します。
3$filePath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'example.txt';
4file_put_contents($filePath, 'このファイルはテスト用です。');
5
6// SplFileObjectのインスタンスを作成します。
7$fileObject = new SplFileObject($filePath, 'r');
8
9// getFileInfo() メソッドを呼び出し、SplFileInfoオブジェクトを取得します。
10// 引数を省略した場合、SplFileInfo::class のインスタンスが返されます。
11// オプションで、SplFileInfoを継承したカスタムクラス名を引数に指定することも可能です。
12// 例: $fileInfo = $fileObject->getFileInfo(MyCustomFileInfo::class);
13$fileInfo = $fileObject->getFileInfo();
14
15// 取得したSplFileInfoオブジェクトから、ファイル名などの情報を取得できます。
16echo $fileInfo->getFilename() . PHP_EOL; // 例: example.txt
17
18// 使用した一時ファイルを削除します。
19unlink($filePath);
20?>

引数(parameters)

string $class = null

  • string $class = null: ファイル情報取得に使用するクラス名を指定します。指定しない場合は SplFileInfo クラスが使用されます。

戻り値(return)

SplFileInfo

このメソッドは、現在のSplFileObjectオブジェクトに対応するファイルの情報を持つSplFileInfoオブジェクトを返します。SplFileInfoオブジェクトを使用すると、ファイル名、サイズ、最終更新日時などのファイルに関する詳細情報を取得できます。

サンプルコード

SplFileObject::getFileInfo でファイル情報を取得する

1<?php
2
3// 一時ファイルの名前を生成
4$tempFilePath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'example_file_splfileobject.txt';
5
6// テスト用ファイルを作成し、内容を書き込む
7if (file_put_contents($tempFilePath, "This is a test file for SplFileObject::getFileInfo.") === false) {
8    die("エラー: テストファイルの作成に失敗しました。");
9}
10
11try {
12    // SplFileObject のインスタンスを生成
13    // 第二引数 'r' はファイルを読み込みモードで開くことを意味します。
14    $fileObject = new SplFileObject($tempFilePath, 'r');
15
16    // getFileInfo() メソッドを呼び出して、SplFileInfo オブジェクトを取得
17    // 引数 $class を省略すると、SplFileInfo クラスのインスタンスがデフォルトで返されます。
18    $fileInfo = $fileObject->getFileInfo();
19
20    // 取得した SplFileInfo オブジェクトから様々なファイル情報を表示
21    echo "ファイル名: " . $fileInfo->getFilename() . PHP_EOL;
22    echo "パス: " . $fileInfo->getPath() . PHP_EOL;
23    echo "フルパス: " . $fileInfo->getPathname() . PHP_EOL;
24    echo "サイズ (バイト): " . $fileInfo->getSize() . PHP_EOL;
25    echo "ファイルタイプ: " . $fileInfo->getType() . PHP_EOL;
26    echo "最終変更日時: " . date('Y-m-d H:i:s', $fileInfo->getMTime()) . PHP_EOL;
27    echo "読み取り可能?: " . ($fileInfo->isReadable() ? 'はい' : 'いいえ') . PHP_EOL;
28    echo "書き込み可能?: " . ($fileInfo->isWritable() ? 'はい' : 'いいえ') . PHP_EOL;
29
30} catch (RuntimeException $e) {
31    // ファイルが見つからない、アクセス権がないなどのエラーを捕捉
32    echo "エラーが発生しました: " . $e->getMessage() . PHP_EOL;
33} finally {
34    // プログラム終了時に作成した一時ファイルを削除
35    if (file_exists($tempFilePath)) {
36        unlink($tempFilePath);
37        echo "一時ファイルを削除しました: " . $tempFilePath . PHP_EOL;
38    }
39}
40
41?>

PHPのSplFileObject::getFileInfoメソッドは、ファイルの内容を読み書きするSplFileObjectクラスのインスタンスから、そのファイルに関する詳細なメタデータ情報を取得するために使用されます。SplFileObjectは、ファイル操作をオブジェクト指向的に行うための便利なクラスです。

このgetFileInfo()メソッドは、引数$classを省略すると、デフォルトでSplFileInfoクラスのインスタンスを返します。このSplFileInfoオブジェクトには、ファイル名、パス、サイズ、最終変更日時、ファイルの種類、読み書き可能かどうかなど、ファイルに関する多岐にわたる情報が含まれています。

サンプルコードでは、まず一時ファイルを作成し、そのファイルをSplFileObjectとして開いています。次に、$fileObject->getFileInfo()を呼び出すことでSplFileInfoオブジェクトを取得し、そこからgetFilename()getSize()などのメソッドを使って、具体的なファイル情報を取得・表示しています。このように、ファイルの実体を開いた状態から、そのファイルの情報を手軽に参照できるのがこのメソッドの特長です。エラーが発生した場合はRuntimeExceptionを捕捉し、最後に一時ファイルを確実に削除しています。

SplFileObject::getFileInfo()メソッドは、ファイル名やサイズなどを直接返すのではなく、ファイルの様々な情報をまとめたSplFileInfoオブジェクトを返します。具体的な情報は、このオブジェクトが持つgetFilename()などのメソッドを通して取得してください。

ファイルが見つからない、アクセス権限がないなどの問題が発生した際にはRuntimeExceptionが発生する可能性があるため、try-catchブロックによる適切なエラーハンドリングが重要です。また、SplFileObjectのコンストラクタで指定するファイルモード(例: 'r'は読み込みモード)は、ファイルの操作に直接影響するため、目的と合致したモードを選択してください。一時ファイルなどを利用した場合は、finallyブロックで確実に後処理(ファイルの削除など)を行い、リソースの解放を忘れないようにすることが安全なコード運用の基本です。

関連コンテンツ

関連プログラミング言語