(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)
pathinfo — ファイルパスに関する情報を返す
pathinfo() は、path
に関する情報を返します。flags
によって連想配列あるいは文字列のどちらかとなります。
注意:
カレントのパスに関する情報を取得するには、 定義済みの変数 のセクションをご覧ください。
注意:
pathinfo() は入力された文字列をそのまま扱います。 よって、実際のファイルシステムや "
.." のようなパスコンポーネントも認識しません。
注意:
Windows システムでのみ、
\文字はディレクトリのセパレータとして解釈されます。 それ以外のシステムでは、他の文字と同じように扱われます。
pathinfo() はロケールを考慮して処理を行います。 マルチバイト文字を含むパスを正しく処理するには、正しいロケールを setlocale() 関数で設定しておかなければなりません。
path調べたいパス。
flags
指定する場合は、どの要素を返すのかを
PATHINFO_DIRNAME 、
PATHINFO_BASENAME 、
PATHINFO_EXTENSION あるいは
PATHINFO_FILENAME
のいずれかで指定します。
flags を省略した場合はすべての要素を返します。
flags パラメータを渡さなかった場合は、次の要素を含む連想配列を返します。
dirname、basename、
extension (存在すれば)、そして filename。
注意:
pathに複数の拡張子が含まれる場合は、PATHINFO_EXTENSIONは最後の拡張子だけを返します。また、PATHINFO_FILENAMEは最後の拡張子だけを取り除きます (最初のサンプルを参照ください)。
注意:
pathに拡張子がない場合は、extension要素は返されません (以下の二番目の例を参照ください)。
注意:
pathのbasenameがドットで始まる場合は、それに続く文字はextensionとみなされます。そしてfilenameは空文字列となります (以下の三番目の例を参照ください)。
flags を指定すると、
要求した要素を文字列で返します。
例1 pathinfo() の例
<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n";
?>上の例の出力は以下となります。
/www/htdocs/inc lib.inc.php php lib.inc
例2 pathinfo() での、拡張子を空にしたときと拡張子がないときの違いの例
<?php
$path_parts = pathinfo('/path/emptyextension.');
var_dump($path_parts['extension']);
$path_parts = pathinfo('/path/noextension');
var_dump($path_parts['extension']);
?>上の例の出力は、 たとえば以下のようになります。
string(0) "" Notice: Undefined index: extension in test.php on line 6 NULL
例3 pathinfo() での、ドットファイルの例
<?php
print_r(pathinfo('/some/path/.test'));
?>上の例の出力は、 たとえば以下のようになります。
Array ( [dirname] => /some/path [basename] => .test [extension] => test [filename] => )
例4 配列の分解機能を、pathinfo() と一緒に使う例
flags パラメータは、ビットマスクではありません。
単一の値だけを指定できます。
パース済みの値の限られた一部を選択したい場合、
配列を分解する機能を以下のようにして使います:
<?php
['basename' => $basename, 'dirname' => $dirname] = pathinfo('/www/htdocs/inc/lib.inc.php');
var_dump($basename, $dirname);
?>上の例の出力は、 たとえば以下のようになります。
string(11) "lib.inc.php" string(15) "/www/htdocs/inc"
Use this function in place of pathinfo to make it work with UTF-8 encoded file names too
<?php
function mb_pathinfo($filepath) {
preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im',$filepath,$m);
if($m[1]) $ret['dirname']=$m[1];
if($m[2]) $ret['basename']=$m[2];
if($m[5]) $ret['extension']=$m[5];
if($m[3]) $ret['filename']=$m[3];
return $ret;
}
?>If a file has more than one 'file extension' (seperated by periods), the last one will be returned.
For example:
<?php
$pathinfo = pathinfo('/dir/test.tar.gz');
echo 'Extension: '.$pathinfo['extension'];
?>
will produce:
Extension: gz
and not tar.gzabout the path, there are one thing you should note :
On Windows, both slash (/) and backslash (\) are used as directory separator character. In other environments, it is the forward slash (/). (this explain is from basename() function part https://www.php.net/manual/en/function.basename.php)
example:
<?php
$path = "https://urvidutta.com /a\b\c\filename.pdf";
echo pathinfo($pdfUrl, PATHINFO_BASENAME); //get basename
//output
//on window: result is filename.pdf
//on Linux: result is a\b\c\filename.pdf (that is may not your expect)
//so in order to get same result in different system. i will do below first.
$path = str_replace($path, '\\', '/'); //convert '\' to '/'
?>