PHPでファイルパスからディレクトリ名やファイル名を抽出する際には、dirname()、basename()、pathinfo() の3つの組み込み関数がよく利用されます。それぞれの機能と使い分けについて、具体的な例を交えて解説します。
dirname() 関数
dirname() は、指定されたパス文字列からディレクトリ部分のみを取得します。引数にはファイルまたはディレクトリのフルパスを渡します。
string dirname ( string $path )
よく使われるパターンとして、__FILE__(現在実行中のスクリプトの絶対パス)と組み合わせて、親ディレクトリのパスを取得することがあります。
<?php
echo dirname("c:/testweb/home.php") . "<br/>";
echo dirname("/testweb/home.php") . "<br/><br/>";
echo __FILE__ . "<br/>";
echo dirname(__FILE__) . "<br/>";
echo dirname(dirname(__FILE__));
?>
出力結果:
c:/testweb
/testweb
E:\wamp\www\test.php
E:\wamp\www
E:\wamp
basename() 関数
basename() は、パスからファイル名部分のみを抽出します。dirname() とは逆の役割を持ちます。
string basename ( string $path [, string $suffix ] )
第2引数 $suffix を指定すると、末尾に一致する文字列(拡張子など)を削除して返します。
<?php
var_dump(basename("/etc/sudoers.d", ".d")); // "sudoers"
var_dump(basename("/etc/passwd")); // "passwd"
var_dump(basename("/etc/")); // "etc"
var_dump(basename(".")); // "."
var_dump(basename("/")); // ""
?>
出力結果:
string(7) "sudoers"
string(6) "passwd"
string(3) "etc"
string(1) "."
string(0) ""
pathinfo() 関数
pathinfo() は、パスを詳細に解析し、配列形式でディレクトリ名、ファイル名、拡張子、ファイル名(拡張子なし)を返します。
mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
$options に特定の定数を指定することで、必要な要素だけを取得できます。デフォルトではすべての要素を含む配列を返します。
<?php
$details = pathinfo("http://localhost/index.php");
print_r($details);
?>
出力結果:
Array
(
[dirname] => http://localhost
[basename] => index.php
[extension] => php
[filename] => index
)
この関数は、URLやファイルパスの構造を正確に把握したい場合に非常に有用です。特に、拡張子のチェックや動的ファイル名の生成に活用できます。