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

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

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

作成日: 更新日:

基本的な使い方

getPathnameメソッドは、DirectoryIteratorオブジェクトが現在指し示しているファイルまたはディレクトリの完全なパス名を取得するメソッドです。このメソッドは、ファイルシステム上でのその要素の正確な位置を文字列として返します。

DirectoryIteratorクラスは、特定のディレクトリ内のファイルやサブディレクトリといったエントリを一つずつ繰り返し処理する際に使用されます。その際、各エントリが具体的にどの場所に存在するのか、つまりそのファイルシステム上のフルパスを知りたい場合に、このgetPathnameメソッドが非常に役立ちます。

getPathnameメソッドは引数を一切取りません。戻り値は常に文字列型で、例えば「/path/to/directory/filename.txt」のような形式で、ディレクトリ構造を含んだ完全なパスが提供されます。

DirectoryIteratorクラスには、ファイル名やディレクトリ名のみを返すgetName()メソッドも存在しますが、getPathname()メソッドはディレクトリパスを含めた完全なパスを返す点が異なります。これにより、取得したパス情報を基に、ファイルの読み書きや、特定のファイルに対する移動・削除といった操作を正確に行うことが可能になります。システムエンジニアを目指す方にとって、ファイルシステムの操作は基本的なスキルであり、このメソッドはファイルの場所を正確に把握し、プログラムで利用するために不可欠なツールとなります。

構文(syntax)

1<?php
2$directoryIterator = new DirectoryIterator('.');
3echo $directoryIterator->getPathname();
4?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

DirectoryIterator::getPathname() は、現在のファイルまたはディレクトリの絶対パスを文字列で返します。

サンプルコード

PHP DirectoryIteratorでファイルパスを取得する

1<?php
2
3/**
4 * 指定されたディレクトリ内の各ファイルシステムエントリの完全なパスとファイル名を表示します。
5 *
6 * DirectoryIterator は、ディレクトリの内容を反復処理するためのイテレータを提供します。
7 * getPathname() メソッドは、ファイルまたはディレクトリの完全なパスと名前(例: /path/to/file.txt)を返します。
8 *
9 * @param string $directoryPath 処理するディレクトリのパス。
10 */
11function displayDirectoryPathnames(string $directoryPath): void
12{
13    echo "ディレクトリ '{$directoryPath}' の内容:\n";
14
15    try {
16        // DirectoryIterator のインスタンスを作成し、指定されたディレクトリを反復処理します。
17        // ここで指定するパスは、絶対パスでも相対パスでも構いません。
18        $iterator = new DirectoryIterator($directoryPath);
19
20        // ディレクトリ内の各ファイルシステムエントリをループ処理します。
21        foreach ($iterator as $fileInfo) {
22            // getPathname() メソッドを呼び出し、エントリの完全なパスとファイル名(またはディレクトリ名)を取得します。
23            // 例: /var/www/html/index.php や /var/www/html/images
24            echo "  " . $fileInfo->getPathname() . "\n";
25        }
26    } catch (UnexpectedValueException $e) {
27        // 指定されたディレクトリパスが無効な場合(例: 存在しない、アクセス権がない)に発生する例外をキャッチします。
28        echo "エラー: ディレクトリ '{$directoryPath}' を開けませんでした。\n";
29        echo "詳細: " . $e->getMessage() . "\n";
30    }
31}
32
33// このスクリプトが実行されている現在のディレクトリのパスを取得します。
34// これにより、スクリプトがどの場所で実行されても機能します。
35$currentDirectory = __DIR__;
36
37// 関数を呼び出し、現在のディレクトリ内のエントリのパス名を表示します。
38displayDirectoryPathnames($currentDirectory);
39
40?>

PHPのDirectoryIteratorクラスに属するgetPathname()メソッドは、ディレクトリ内の各エントリ(ファイルやサブディレクトリ)の完全なパスと名前を文字列として取得します。引数は不要です。

サンプルコードでは、DirectoryIteratorを使って指定ディレクトリ内のコンテンツを順に処理します。その際、getPathname()は、各エントリ(例: /var/www/html/index.php)の絶対パスと名前を文字列で取得し、表示しています。これは、ファイル操作などで正確なフルパス情報が必要な場合に役立ちます。

DirectoryIteratorでディレクトリを効率的に走査し、getPathname()で個々のエントリのパス情報を取得します。また、存在しないディレクトリの場合のエラー処理も示されており、堅牢なプログラム作成の基本を学べます。

getPathname() メソッドは、DirectoryIterator が反復処理する各ファイルやディレクトリの「完全なパスと名前」を文字列として返します。引数は不要です。

DirectoryIterator のコンストラクタに存在しないパスやアクセス権のないパスを渡すと、UnexpectedValueException が発生します。そのため、本番環境で利用する際は、サンプルコードのように try-catch を用いた例外処理を必ず実装し、予期せぬエラーでプログラムが停止しないようにしてください。

サンプルコードでは __DIR__ を使用して現在のスクリプトディレクトリを指定していますが、任意の絶対パスや相対パスも指定可能です。また、getPathname() は「.」や「..」のような特殊なディレクトリのエントリも含むため、これらを処理対象外としたい場合は、isDot() などのメソッドで明示的に除外することを検討すると良いでしょう。

関連コンテンツ