【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 * ファイルパスから拡張子を抽出するシンプルな関数。 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では日本語を含むファイルパスも問題なく処理されますのでご安心ください。この関数は、ファイルシステム上の実体の有無に関わらず、与えられたパス文字列の構文に基づいて情報を解析します。したがって、実体が存在しないパスに対しても、その形式に応じた情報が返されることを理解してご利用ください。