【PHP8.x】GlobIterator::getPathname()メソッドの使い方
getPathnameメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getPathnameメソッドは、PHPのGlobIteratorクラスに属し、現在のイテレータが指すファイルまたはディレクトリの完全なパス名を取得するメソッドです。GlobIteratorは、glob()関数と同様に、特定のパターンに合致するファイルやディレクトリを効率的に反復処理するためのイテレータです。このgetPathnameメソッドは、反復処理中に現在注目している項目のシステム上の絶対パスを文字列として返します。
具体的には、ファイルやディレクトリが格納されている親ディレクトリのパスと、そのファイルまたはディレクトリ自体の名前を結合した、完全なパスを生成します。たとえば、/usr/local/dataディレクトリにconfig.iniというファイルがあり、GlobIteratorがこのファイルを指している場合、getPathnameメソッドは/usr/local/data/config.iniという形式の文字列を返します。
このメソッドは、イテレータを使って巡回している各ファイルやディレクトリに対して、そのフルパス情報を用いてファイルの読み書き、コピー、移動といった具体的な操作を実行する際に非常に有用です。ファイル名部分のみを返すgetFilenameメソッドとは異なり、getPathnameメソッドは、その項目がどこに存在するかを示す完全な位置情報を提供するため、ファイルシステム操作において不可欠な機能の一つです。
構文(syntax)
1<?php 2$iterator = new GlobIterator(__DIR__ . '/*.php'); 3foreach ($iterator as $file) { 4 echo $file->getPathname() . "\n"; 5} 6?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
GlobIterator::getPathname は、現在のファイルパス(ディレクトリパスとファイル名を含む)を文字列で返します。
サンプルコード
PHP GlobIterator getPathnameでパス名を取得する
1<?php 2 3// GlobIterator を使用して、指定されたパターンに一致するファイルやディレクトリをイテレートするサンプルコードです。 4// このスクリプトを実行する前に、同じディレクトリにいくつかのファイルやサブディレクトリを作成しておくと、出力が確認しやすくなります。 5// 例: 6// - test_file1.txt 7// - script.php (このファイル自体) 8// - sub_directory/ 9// - sub_directory/nested_file.log 10 11try { 12 // 現在のスクリプトがあるディレクトリ内の全てのファイルとディレクトリを対象とするGlobIteratorを作成します。 13 // パターン '__DIR__/*' は、カレントディレクトリの直接の子要素(ファイルおよびディレクトリ)にマッチします。 14 $iterator = new GlobIterator(__DIR__ . '/*'); 15 16 echo "--- GlobIterator::getPathname() の使用例 ---\n"; 17 echo "現在のディレクトリ内の各要素のパス名:\n"; 18 19 if ($iterator->count() > 0) { 20 // イテレータをループし、各要素の情報を取得します。 21 // $fileInfo は SplFileInfo のインスタンスであり、ファイルやディレクトリの情報を提供します。 22 foreach ($iterator as $fileInfo) { 23 // getPathname() メソッドは、現在の要素(ファイルまたはディレクトリ)のフルパス名 24 // (ディレクトリとファイル名を合わせたもの)を文字列で返します。 25 echo $fileInfo->getPathname() . "\n"; 26 } 27 } else { 28 echo "指定されたパターンに一致するファイルやディレクトリは見つかりませんでした。\n"; 29 } 30 31} catch (Exception $e) { 32 // GlobIterator の作成時などに発生する可能性のある例外を捕捉します。 33 echo "エラーが発生しました: " . $e->getMessage() . "\n"; 34} 35 36?>
このPHPサンプルコードは、GlobIteratorクラスとそのメソッドであるgetPathname()を使って、指定されたパターンに一致するファイルやディレクトリのパス名を取得する方法を示しています。GlobIteratorは、ファイルシステムの特定のパターンに合致する要素を効率的に走査(イテレート)するための便利なクラスです。
まず、new GlobIterator(__DIR__ . '/*')という記述で、現在のスクリプトがあるディレクトリ直下の全てのファイルとサブディレクトリを対象とするイテレータを作成しています。__DIR__は、現在のスクリプトのディレクトリパスを示すPHPの定数です。
次に、foreachループを使用して、イテレータが見つけた各要素を順に処理します。このループ内で$fileInfo変数として取得されるのはSplFileInfoというオブジェクトで、これによりファイルやディレクトリに関する様々な詳細情報にアクセスできます。
ここで$fileInfo->getPathname()メソッドが使われています。このメソッドは引数を一切必要とせず、現在の要素(ファイルまたはディレクトリ)の完全なパス名、つまりルートディレクトリからファイル名(またはディレクトリ名)までを含んだ文字列を返します。例えば、C:\xampp\htdocs\my_project\test_file1.txtや/var/www/html/sub_directoryといった形式のパスです。この戻り値を利用することで、プログラム内で対象のファイルやディレクトリがどこにあるのかを正確に把握し、その後のファイル操作や処理に活用できます。getPathname()は、ファイルシステムを扱う上で非常に基本的ながら重要な役割を果たすメソッドです。
GlobIteratorのパターン指定には注意が必要です。サンプルコードの__DIR__ . '/*'は、現在のディレクトリ直下のファイルやディレクトリのみを対象とし、サブディレクトリ内の要素は含まれません。サブディレクトリ内も検索したい場合は、別のパターンやアプローチを検討してください。getPathname()メソッドは、要素のファイル名だけでなく、ディレクトリ名を含む完全なパスを文字列として返します。ファイル名だけが必要な場合は、getFilename()などの他のSplFileInfoメソッドを利用すると良いでしょう。GlobIteratorはファイルシステムを操作するため、特にユーザー入力をパターンに含める際は、意図しないファイルへのアクセスを防ぐため、セキュリティに十分配慮し、適切な入力検証とサニタイズを行うことが重要です。