目的
- ファイルパスかラファイル名や拡張子を取得する
pathinfo()
関数の使い方をメモ的にまとめる
謝辞
- 本知見は筆者が記載した記事PHP ファイルパスやURLからファイル名や拡張子等を取得するにコメントを下さった @s9er7 様のご知見です。
- この場を借りて改めて感謝致します!コメントを下さり本当にありがとうございます!
情報
- 筆者は下記サービスを用いて今回の記事内容の動作確認を行った。
方法
-
PHPのファイルシステム関数の一種である
pathinfo()
を用いる。 -
下記の様に記載することでファイルパスの各情報を配列で返してくれる。
pathinfo(ファイルパス);
-
例えば
/etc/nginx/conf.d/default.conf
というファイルパスを渡すと下記の様に「dirname」「basename」「extension」「filename」を配列で返してくれる。<?php $filePath = '/etc/nginx/conf.d/default.conf'; var_dump(pathinfo($filePath)); //array(4) { // ["dirname"]=> // string(17) "/etc/nginx/conf.d" // ["basename"]=> // string(12) "default.conf" // ["extension"]=> // string(4) "conf" // ["filename"]=> // string(7) "default" //}
-
また、当該の関数の第二引数に任意のフラグを渡すことで特定の値を返すこともできる。
pathinfo(ファイルパス, フラグ);
-
例えば
/etc/nginx/conf.d/default.conf
というファイルパスの拡張子込みのファイル名を返してほしい場合は下記の様に指定する。$filePath = '/etc/nginx/conf.d/default.conf'; var_dump(pathinfo($filePath, PATHINFO_BASENAME)); // string(12) "default.conf"と出力される。
-
フラッグを指定することでその他にもディレクトリ、拡張子、拡張子なしのファイル名だけを返す事ができる。
返す値 フラッグ ディレクトリ PATHINFO_DIRNAME ファイル名(拡張子込) PATHINFO_BASENAME ファイル名 PATHINFO_FILENAME 拡張子 PATHINFO_EXTENSION -
実際に実行すると下記のようになる。
$filePath = '/etc/nginx/conf.d/default.conf'; var_dump(pathinfo($filePath, PATHINFO_DIRNAME)); //string(17) "/etc/nginx/conf.d" と表示される var_dump(pathinfo($filePath, PATHINFO_BASENAME)); //string(12) "default.conf" と表示される var_dump(pathinfo($filePath, PATHINFO_FILENAME)); //string(7) "default" と表示される var_dump(pathinfo($filePath, PATHINFO_EXTENSION)); //string(4) "conf" と表示される
注意事項
-
ファイルパスに複数の拡張子が含まれる場合
PATHINFO_EXTENSION
最後の拡張子を返す。 -
ファイルパスに拡張子がない場合、extensionキーは返されない
$filePath = '/etc/nginx/conf.d/default'; var_dump(pathinfo($filePath)); //array(3) { // ["dirname"]=> // string(17) "/etc/nginx/conf.d" // ["basename"]=> // string(7) "default" // ["filename"]=> // string(7) "default" //} $filePath = '/etc/nginx/conf.d/default'; var_dump(pathinfo($filePath, PATHINFO_EXTENSION)); // string(0) "" のように空文字が返される。
-
ファイルパスのベースネーム部分が
.
で始まっている場合はそれに続く文字列は拡張子としてみなされる。
あとがき
- パスの最後の名前部分を返すだけならbasenameでいいのかも知れない。