【PHP8.x】pathinfo()関数の使い方
pathinfo関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
pathinfo関数は、与えられたファイルパスに関する詳細な情報を取得する関数です。この関数は、ファイルパス文字列を解析し、そのパスに含まれるディレクトリ名、ファイル名と拡張子を含むベースネーム、ファイル拡張子、そして拡張子を含まないファイル名といった要素を効率的に抽出することができます。
基本的な使用方法として、ファイルパスを引数に指定すると、これらの情報が連想配列として返されます。例えば、/var/www/html/index.phpというパスを指定した場合、ディレクトリ名、ベースネーム、拡張子、ファイル名がそれぞれ配列のキーとして格納された形で得られます。
より具体的な情報を単体で取得したい場合は、第二引数に特定の定数を指定することで、必要な情報のみを文字列として受け取ることが可能です。PATHINFO_DIRNAMEを指定するとディレクトリ名が、PATHINFO_BASENAMEを指定するとファイル名と拡張子を含む部分が、PATHINFO_EXTENSIONを指定するとファイル拡張子のみが、そしてPATHINFO_FILENAMEを指定すると拡張子を除いたファイル名が返されます。
この関数は、ファイルのアップロード処理で拡張子をチェックしたり、ファイルの名称変更や保存時に拡張子を分離して扱ったりするなど、ファイルパスをプログラムで操作する様々な場面で非常に役立ちます。パスの構成要素を個別に扱う必要がある際に、手動で文字列操作を行うよりも安全かつ簡潔に処理を記述できるため、ファイルの管理機能を実装する上で頻繁に利用されます。
構文(syntax)
1<?php 2$path = "/var/www/html/index.php"; 3$file_info = pathinfo($path); 4print_r($file_info); 5?>
引数(parameters)
string $path, int $flags = PATHINFO_ALL
- string $path: ファイルパスを指定する文字列
- int $flags = PATHINFO_ALL: 取得したいパス情報を指定する整数。デフォルトはPATHINFO_ALLで、全ての情報が取得されます。
戻り値(return)
array|string
pathinfo関数は、指定されたパス文字列からファイル名、拡張子、ディレクトリ名などの情報を取得します。
オプションで第二引数にPATHINFO_EXTENSIONを指定した場合、文字列でファイルの拡張子のみを返します。 それ以外の場合、連想配列でパスの各部分(dirname, basename, extension, filename)を返します。
サンプルコード
PHP pathinfoでディレクトリ名を取得する
1<?php 2 3/** 4 * pathinfo() 関数を使って、指定されたパスのディレクトリ部分を取得するサンプルコードです。 5 * キーワードである 'php pathinfo_dirname' に最も関連する PATHINFO_DIRNAME フラグに焦点を当てます。 6 * PATHINFO_DIRNAME フラグを使用することで、ディレクトリ名のみを直接文字列として取得できます。 7 * これは、パスに関する特定の情報だけを素早く取得したい場合に特に便利です。 8 */ 9function demonstratePathinfoDirname(): void 10{ 11 // サンプルとなる複数のファイルパスを定義します。 12 $filePathUnix = '/var/www/html/public/index.php'; 13 $filePathWindows = 'C:\Users\JohnDoe\Documents\report.txt'; 14 $filePathNoDir = 'my_file.txt'; // ディレクトリ部分がないパス 15 $filePathRoot = '/another_file.txt'; // ルートディレクトリ直下のパス 16 17 // --- UNIX形式パスの例 --- 18 echo "--- UNIX形式パスの例 ---" . PHP_EOL; 19 echo "元のパス: " . $filePathUnix . PHP_EOL; 20 21 // PATHINFO_DIRNAME フラグを使用してディレクトリ名のみを取得します。 22 // pathinfo() 関数に PATHINFO_DIRNAME フラグを渡すと、ディレクトリ名だけを文字列として返します。 23 $dirnameUnix = pathinfo($filePathUnix, PATHINFO_DIRNAME); 24 echo "ディレクトリ名 (PATHINFO_DIRNAME): " . $dirnameUnix . PHP_EOL . PHP_EOL; 25 26 // --- Windows形式パスの例 --- 27 echo "--- Windows形式パスの例 ---" . PHP_EOL; 28 echo "元のパス: " . $filePathWindows . PHP_EOL; 29 $dirnameWindows = pathinfo($filePathWindows, PATHINFO_DIRNAME); 30 echo "ディレクトリ名 (PATHINFO_DIRNAME): " . $dirnameWindows . PHP_EOL . PHP_EOL; 31 32 // --- ディレクトリ部分がないパスの例 --- 33 echo "--- ディレクトリ部分がないパスの例 ---" . PHP_EOL; 34 echo "元のパス: " . $filePathNoDir . PHP_EOL; 35 $dirnameNoDir = pathinfo($filePathNoDir, PATHINFO_DIRNAME); 36 // ディレクトリ部分がない場合、pathinfo() はドット '.' (カレントディレクトリ) を返します。 37 echo "ディレクトリ名 (PATHINFO_DIRNAME): '" . $dirnameNoDir . "'" . PHP_EOL . PHP_EOL; 38 39 // --- ルートディレクトリ直下のパスの例 --- 40 echo "--- ルートディレクトリ直下のパスの例 ---" . PHP_EOL; 41 echo "元のパス: " . $filePathRoot . PHP_EOL; 42 $dirnameRoot = pathinfo($filePathRoot, PATHINFO_DIRNAME); 43 // ルートディレクトリ直下の場合、ルートパス '/' を返します。 44 echo "ディレクトリ名 (PATHINFO_DIRNAME): '" . $dirnameRoot . "'" . PHP_EOL . PHP_EOL; 45 46 47 // --- 参考: PATHINFO_ALL フラグ (デフォルト) を使用した場合 --- 48 echo "--- 参考: PATHINFO_ALL で全ての情報を取得した場合 ---" . PHP_EOL; 49 echo "元のパス: " . $filePathUnix . PHP_EOL; 50 // PATHINFO_ALL を指定するか、フラグを省略すると、パスに関するすべての情報を含む配列が返されます。 51 // この配列の 'dirname' キーから同じディレクトリ名を取得できます。 52 $allPathInfo = pathinfo($filePathUnix, PATHINFO_ALL); 53 echo "全ての情報 (配列):" . PHP_EOL; 54 print_r($allPathInfo); 55 echo "配列から 'dirname' キーで取得: " . $allPathInfo['dirname'] . PHP_EOL; 56} 57 58// 関数を実行して動作を確認します。 59demonstratePathinfoDirname();
PHP 8のpathinfo関数は、ファイルパスから様々な情報を効率的に抽出するために使用されます。この関数は、最初の引数$pathに与えられたファイルパスを解析し、第二引数$flagsで指定された情報を取り出します。$flagsには、パスのどの部分の情報を取得したいかを数値で指定し、デフォルトではPATHINFO_ALLが設定されています。
特に、キーワードであるphp pathinfo_dirnameに関連して、PATHINFO_DIRNAMEフラグを指定すると、パスのディレクトリ部分のみを文字列として取得できます。例えば、/var/www/html/public/index.phpというパスからディレクトリ部分である/var/www/html/publicを直接得ることが可能です。このフラグを使用した場合、pathinfo関数の戻り値は文字列となります。
サンプルコードでは、PATHINFO_DIRNAMEフラグを用いて、UNIX形式、Windows形式、ディレクトリ部分がないパス、ルートディレクトリ直下のパスなど、様々なケースでディレクトリ部分を抽出する例を示しています。ディレクトリ部分が存在しないパス(例: my_file.txt)に対して使用すると、現在のディレクトリを示すドット . が返されます。また、ルートディレクトリ直下のファイル(例: /another_file.txt)では、ルートパス / がディレクトリとして返されます。
参考として、$flagsを省略するかPATHINFO_ALLを指定すると、pathinfo関数はパスの全ての情報(ディレクトリ、ベース名、拡張子など)を連想配列として返します。この配列からは、['dirname']というキーを使ってディレクトリ名を取得できます。このように、pathinfo関数は、ファイルパスの特定の部分だけを素早く、柔軟に取得したい場合に非常に役立ちます。
pathinfo関数は、第2引数$flagsによって戻り値の型が変わる点に注意が必要です。PATHINFO_DIRNAMEのように単一の情報を要求するフラグを指定した場合は、その情報を示す文字列が直接返されます。一方、PATHINFO_ALLを指定するかフラグを省略した場合、パスの全ての情報を含む連想配列が返されるため、取得方法が異なります。
特に、ディレクトリ部分を持たないパス(例: "my_file.txt")を解析した場合、PATHINFO_DIRNAMEの戻り値はカレントディレクトリを示す"."(ドット)となります。また、ルートディレクトリ直下のパス(例: "/another_file.txt")では、ルートパス"/"が返される挙動も理解しておきましょう。この関数はパス文字列の構文解析のみを行い、実際にファイルシステム上にそのパスが存在するかどうかは確認しませんので、別途確認が必要な場合は注意してください。
PHP pathinfoでファイルパス情報を取得する
1<?php 2 3/** 4 * pathinfo関数の基本的な使用例を示す関数。 5 * 6 * この関数は、PHPのpathinfo()関数を使用して、指定されたファイルパスから 7 * ディレクトリ名、ファイル名、拡張子などの情報を取得し表示します。 8 * システムエンジニアを目指す初心者が、ファイルパスの情報を扱う方法を 9 * 理解するのに役立ちます。 10 */ 11function demonstratePathinfo(): void 12{ 13 // テスト用のファイルパスを定義します。 14 // 実際には、動的に取得したファイルパスなどを指定します。 15 $filePath = '/var/www/html/src/index.php'; 16 echo "--- 対象パス: '{$filePath}' ---\n\n"; 17 18 // 1. フラグを指定しない場合 (デフォルトの PATHINFO_ALL) 19 // pathinfo() をフラグなしで呼び出すと、すべての情報を含む連想配列が返されます。 20 echo "--- PATHINFO_ALL (デフォルト動作) の場合 ---\n"; 21 $pathInfoAll = pathinfo($filePath); 22 23 // 取得された配列の内容を表示します。 24 echo "取得された情報 (配列形式):\n"; 25 print_r($pathInfoAll); 26 27 // 配列の各要素にアクセスして個別の情報を表示します。 28 echo " - ディレクトリ名: " . ($pathInfoAll['dirname'] ?? '取得不可') . "\n"; 29 echo " - ベース名 (ファイル名+拡張子): " . ($pathInfoAll['basename'] ?? '取得不可') . "\n"; 30 echo " - 拡張子: " . ($pathInfoAll['extension'] ?? '取得不可') . "\n"; 31 echo " - ファイル名 (拡張子なし): " . ($pathInfoAll['filename'] ?? '取得不可') . "\n"; 32 echo "\n"; 33 34 // 2. 特定の情報を取得するフラグを指定した場合 35 // 各フラグを指定すると、対応する情報のみの文字列が返されます。 36 echo "--- 特定のフラグを指定した場合 (文字列形式で返る) ---\n"; 37 38 // PATHINFO_DIRNAME を指定すると、ディレクトリ名のみを取得します。 39 echo " - ディレクトリ名 (PATHINFO_DIRNAME): " . pathinfo($filePath, PATHINFO_DIRNAME) . "\n"; 40 41 // PATHINFO_BASENAME を指定すると、ファイル名と拡張子を含むベース名を取得します。 42 echo " - ベース名 (PATHINFO_BASENAME): " . pathinfo($filePath, PATHINFO_BASENAME) . "\n"; 43 44 // PATHINFO_EXTENSION を指定すると、拡張子のみを取得します。 45 echo " - 拡張子 (PATHINFO_EXTENSION): " . pathinfo($filePath, PATHINFO_EXTENSION) . "\n"; 46 47 // PATHINFO_FILENAME を指定すると、拡張子なしのファイル名のみを取得します。 48 echo " - ファイル名 (PATHINFO_FILENAME): " . pathinfo($filePath, PATHINFO_FILENAME) . "\n"; 49 echo "\n"; 50 51 // 3. 拡張子のないファイルパスの場合の例 52 $noExtensionPath = '/home/user/document/report'; 53 echo "--- 拡張子のないパス: '{$noExtensionPath}' の場合 ---\n"; 54 print_r(pathinfo($noExtensionPath)); 55 echo "\n"; 56 57 // 4. ディレクトリのみのパスの場合の例 58 $directoryOnlyPath = '/var/log/'; 59 echo "--- ディレクトリのみのパス: '{$directoryOnlyPath}' の場合 ---\n"; 60 print_r(pathinfo($directoryOnlyPath)); 61 echo "\n"; 62} 63 64// 関数を実行して結果を表示します。 65demonstratePathinfo(); 66 67?>
PHPのpathinfo関数は、ファイルパスの文字列を解析し、その構成要素であるディレクトリ名、ファイル名、拡張子などの情報を取得するために利用されます。システムエンジニアを目指す方にとって、ファイルパスの操作は日常的に発生するため、この関数は非常に役立ちます。
この関数は、第1引数に分析したいファイルパスを文字列で指定します。第2引数はオプションで、取得したい情報の種類を定数で指定します。
第2引数を省略するか、デフォルト値のPATHINFO_ALLを指定した場合、関数はdirname(ディレクトリ名)、basename(ファイル名と拡張子)、extension(拡張子)、filename(拡張子なしのファイル名)をキーとする連想配列を返します。これにより、パスのすべての要素を一度に取得し、個別にアクセスすることが可能です。
一方、PATHINFO_DIRNAME、PATHINFO_BASENAME、PATHINFO_EXTENSION、PATHINFO_FILENAMEといった特定のフラグを指定すると、そのフラグに対応する情報のみが文字列として直接返されます。例えば、PATHINFO_EXTENSIONを指定すれば、ファイルパスから拡張子のみを文字列で取得できます。
サンプルコードでは、まずPATHINFO_ALLを指定した場合の連想配列での戻り値と、その各要素へのアクセス方法を示しています。次に、特定のフラグを指定して必要な情報だけを文字列で取得する例を紹介し、さらに拡張子がないパスやディレクトリのみのパスでの挙動も示しています。これにより、様々なケースでのpathinfo関数の挙動を網羅的に理解し、実用的なファイルパス処理に応用できるようになります。
pathinfo関数は、第2引数のフラグによって戻り値の型が変わる点に注意が必要です。フラグを指定しない(またはPATHINFO_ALL)場合は、ディレクトリ名やファイル名などを含む連想配列が返されます。この配列から個別の情報を取り出す際は、アクセスするキーが常に存在するとは限らないため、エラーを避けるためにnull合体演算子(??)などで存在確認を行うと安全です。一方、PATHINFO_DIRNAMEなどの特定のフラグを指定すると、対応する情報のみが文字列として直接返されます。また、入力パスに拡張子がない場合や、パスがディレクトリ名で終わる場合など、パスの形式によっては、期待する情報(例: extensionやfilename)が結果に含まれないことがあります。これらの挙動を事前に把握しておくことで、堅牢なファイルパス処理を実装できます。
PHP pathinfoでファイル拡張子を取得する
1<?php 2 3/** 4 * ファイルパスから拡張子を抽出するシンプルな関数。 5 * 6 * pathinfo() 関数はファイルパスに関する情報を取得するために使用され、 7 * PATHINFO_EXTENSION フラグを指定すると、ファイルの拡張子のみを文字列として返します。 8 * 拡張子がない場合は空の文字列が返されます。 9 * 10 * @param string $filePath 拡張子を抽出したいファイルパス。 11 * @return string 抽出された拡張子。拡張子がない場合は空の文字列。 12 */ 13function getFileExtension(string $filePath): string 14{ 15 // pathinfo() 関数と PATHINFO_EXTENSION フラグを使って拡張子を取得 16 $extension = pathinfo($filePath, PATHINFO_EXTENSION); 17 return $extension; 18} 19 20// --- 使用例 --- 21 22// 拡張子のあるファイルパス 23$sampleFilePathWithExtension = '/var/www/html/index.php'; 24$extension1 = getFileExtension($sampleFilePathWithExtension); 25 26echo "ファイルパス: " . $sampleFilePathWithExtension . "\n"; 27echo "抽出された拡張子: " . $extension1 . "\n\n"; 28 29// 拡張子がないファイルパス 30$sampleFilePathWithoutExtension = '/path/to/my/document'; 31$extension2 = getFileExtension($sampleFilePathWithoutExtension); 32 33echo "ファイルパス: " . $sampleFilePathWithoutExtension . "\n"; 34echo "抽出された拡張子: " . $extension2 . " (拡張子がないため空文字列)\n\n"; 35 36// 複数のドットがあるファイルパス 37$sampleFilePathMultipleDots = 'archive.tar.gz'; 38$extension3 = getFileExtension($sampleFilePathMultipleDots); 39 40echo "ファイルパス: " . $sampleFilePathMultipleDots . "\n"; 41echo "抽出された拡張子: " . $extension3 . "\n"; 42 43?>
このPHPのサンプルコードでは、pathinfo関数を利用してファイルパスから拡張子を効率的に抽出する方法を解説しています。pathinfo関数は、ファイルパスの情報を分析し、ファイル名、ディレクトリ名、拡張子などを取得するために用いられます。
このコードの中心となるgetFileExtension関数は、ファイルパスを表す文字列$filePathを引数として受け取ります。関数内部では、pathinfo($filePath, PATHINFO_EXTENSION)を呼び出しており、第二引数にPATHINFO_EXTENSIONという定数を指定することで、ファイルパスから拡張子のみを文字列として抽出するよう指示しています。この関数は抽出された拡張子を文字列で返しますが、もし指定されたファイルパスに拡張子がない場合は空の文字列を返します。
使用例を見ると、/var/www/html/index.phpからは「php」が、拡張子を持たない/path/to/my/documentからは空の文字列が抽出されることがわかります。また、archive.tar.gzのように複数のドットを含むファイル名であっても、最後のドット以降の「gz」が正しく拡張子として取得されることを示しています。このようにpathinfo関数は、ファイルパスから特定の情報を簡潔に取得する際に非常に便利な機能です。
pathinfo関数は、第二引数にPATHINFO_EXTENSIONを指定することで、ファイルパスの最後の拡張子を文字列で抽出します。拡張子がないパスに対しては、空の文字列が返される点に注意が必要です。これはエラーではありませんが、その後の処理で空文字列を適切に扱う必要があります。また、archive.tar.gzのように複数のドットがある場合でも、関数は最後のドット以降(この場合はgz)を拡張子と認識します。もしtar.gz全体を拡張子として扱いたい場合は、別途文字列処理を検討してください。pathinfo関数は指定するフラグによって戻り値の型が文字列または配列に変わるため、利用時には引数と戻り値の型をよく確認することが重要です。
PHP pathinfo関数で日本語パス情報を取得する
1<?php 2 3// 日本語を含むファイルパスの例 4$path = '/var/www/html/プロジェクト/データファイル.txt'; 5 6echo "元のパス: " . $path . PHP_EOL . PHP_EOL; 7 8// pathinfo関数をデフォルト(PATHINFO_ALL)で呼び出すと、 9// パス情報が連想配列として返されます。 10// 日本語のパスも正しく処理されます。 11$pathInfo = pathinfo($path); 12 13echo "--- pathinfo() の結果 (PATHINFO_ALL) ---" . PHP_EOL; 14print_r($pathInfo); 15 16echo "取得された情報:" . PHP_EOL; 17echo " ディレクトリ名 (dirname): " . $pathInfo['dirname'] . PHP_EOL; 18echo " ファイル名(拡張子含む) (basename): " . $pathInfo['basename'] . PHP_EOL; 19echo " 拡張子 (extension): " . $pathInfo['extension'] . PHP_EOL; 20echo " 拡張子なしファイル名 (filename): " . $pathInfo['filename'] . PHP_EOL; 21echo PHP_EOL; 22 23// 特定の情報を取得したい場合は、第2引数にフラグを指定します。 24// この場合、戻り値は文字列になります。 25echo "--- 特定の情報を取得する例 ---" . PHP_EOL; 26 27$dirname = pathinfo($path, PATHINFO_DIRNAME); 28echo "PATHINFO_DIRNAME (ディレクトリ名): " . $dirname . PHP_EOL; 29 30$basename = pathinfo($path, PATHINFO_BASENAME); 31echo "PATHINFO_BASENAME (ファイル名): " . $basename . PHP_EOL; 32 33$extension = pathinfo($path, PATHINFO_EXTENSION); 34echo "PATHINFO_EXTENSION (拡張子): " . $extension . PHP_EOL; 35 36$filename = pathinfo($path, PATHINFO_FILENAME); 37echo "PATHINFO_FILENAME (拡張子なしファイル名): " . $filename . PHP_EOL; 38 39?>
PHPのpathinfo関数は、ファイルパスをディレクトリ名、ファイル名、拡張子などの個別の情報に分解するために使用します。この関数はPHP 8でも動作し、日本語を含むパスも正しく処理できます。
第一引数には解析したいファイルパスを文字列で指定し、第二引数には取得したい情報の種類を定数で指定します。第二引数を省略するかPATHINFO_ALLを指定すると、戻り値は連想配列となり、「dirname」「basename」「extension」「filename」の各キーで全てのパス情報が返されます。一方、特定の情報だけを取得したい場合は、PATHINFO_DIRNAME(ディレクトリ名)、PATHINFO_BASENAME(ファイル名)、PATHINFO_EXTENSION(拡張子)、PATHINFO_FILENAME(拡張子なしファイル名)などの定数を指定し、その場合は指定された情報が文字列として直接返されます。
サンプルコードでは、まず日本語を含むパスを用意し、pathinfo関数をデフォルトで呼び出しています。結果は連想配列として表示され、各キーに対応する情報が日本語も含めて正しく取得されていることがわかります。次に、それぞれのフラグを使って特定の情報を個別に取得する例を示しています。このように、pathinfo関数を利用することで、ファイルパスから必要な要素を簡単に抽出し、プログラムで活用できるようになります。
pathinfo関数を利用する際は、第二引数に指定するフラグによって戻り値の型が変化する点に注意が必要です。フラグを省略するかPATHINFO_ALLを指定した場合、パス情報が連想配列で返されます。しかし、PATHINFO_DIRNAMEなどの特定のフラグを指定すると、その情報が文字列として直接返されます。PHP 8では日本語を含むファイルパスも問題なく処理されますのでご安心ください。この関数は、ファイルシステム上の実体の有無に関わらず、与えられたパス文字列の構文に基づいて情報を解析します。したがって、実体が存在しないパスに対しても、その形式に応じた情報が返されることを理解してご利用ください。