PHPではファイル名や拡張子、ディレクトリ名、フルパスなどを簡単に取得することができます。
いくつか方法があるので、それぞれを比較し、やりやすい方法でコーディングしていきましょう。
目次
basename関数で取得
パスの最後にある名前を取得できます。
ファイル名を取得
フルパスからファイル名だけを取得してみましょう。
1 2 |
// ファイルのフルパスを指定し、basename関数で出力 echo basename('/home/example/www/file.txt'); |
file.txt
上記のようにフルパスをbasename()
で出力するとfile.txt
とファイル名だけが取得できましたね。
ディレクトリ名を取得
パスの最後がディレクトリ名だった場合、そのディレクトリを取得します。
1 2 |
// 最後がファイルではなくディレクトリだったら、最後のディレクトリを取得する echo basename('/home/example/www/dir/'); |
dir
最後がディレクトリでも、最後の文字列を区切り文字/
(スラッシュ)を除いて取得します。
ファイル名から拡張子を除外して取得
フルパスからファイル名を、拡張子を省いて取得してみましょう。
1 2 |
// basename関数の第二引数に拡張子を指定すると、そこを除外して取得できる echo basename('/home/example/www/file.txt', '.txt'); |
file
今度は.txt
も除外され、ファイル名のfile
の部分だけが取得できました。
basename関数の構文
basename (ファイル名を取得したいパス [, 除外したい最後の文字] ([ ]は省略可));
basename()
はパスを指定するだけで、自動的にファイル名を判別し取得してくれます。
/
(スラッシュ)(windowsは\
(バックスラッシュ)も)を区切り文字とし、最後の区切り文字以降をファイル名として取得し、区切り文字は削除されます。
除外したい最後の文字
第二引数の「除外したい最後の文字」は省略可ですが、ここを指定すると、その文字列もカットされます。
拡張子を除外したい場合によく使いますが、最後の文字列しか指定できません。
file.txt
→.txt
を指定→file
部分のみ取得file.txt
→file
を指定→最後の文字列ではないので、file.txt
をそのまま取得
2.は最後以外の文字列を指定しており、無意味なのでやめましょう。
pathinfo関数で取得
ファイルパスに関する情報を取得できます。
ファイル名や拡張子などを取得
pathinfo()
はファイル名だけではなく、拡張子やディレクトリなども配列で取得できます。
1 2 3 4 5 6 7 8 |
// pathinfoにフルパスを指定し、連想配列の形で変数に格納 $filepath = pathinfo('/home/example/www/file.txt'); // 連想配列から取得したいファイル情報を出力 echo $filepath['dirname']; // /home/example/www echo $filepath['basename']; // file.txt echo $filepath['extension']; // txt echo $filepath['filename']; // file |
/home/example/www
file.txt
txt
file
上記のように、ファイル名や拡張子などのそれぞれの情報を配列に格納し、好きに取り出せるようにしてくれます。
オプションを指定して取得
ファイル名や拡張子などのいずれかをfilepath()
のオプションであらかじめ指定すれば、特定のファイル情報のみ簡単に取得できます。
1 2 3 4 5 |
// pathinfoにフルパスと第二引数にファイル名を取得するオプションを指定し、変数に格納 $filepath = pathinfo('/home/example/www/file.txt', PATHINFO_BASENAME); // その変数をechoで出力するだけ echo $filepath; |
file.txt
第二引数にPATHINFO_BASENAME
のオプションを指定し、単純にecho
で出力すると、ファイル名が表示されました。
第二引数のオプションによって、拡張子やディレクトリなどの特定の情報が1つだけ取得されます。
pathinfo関数の構文
pathinfo ( ファイル情報を取得したいファイルパス [, オプション]([ ]は省略可) );
ファイル情報を連想配列に格納するので、呼び出したいキーを指定すれば自由に引き出し可能です。
pathinfoの連想配列にはどんな要素が格納されているか
例えば先ほどのサンプルを例にpathinfo()
にどのような連想配列が格納されているか見てみましょう。
1 2 |
// フルパスを格納したpathinfoの配列情報を出力 print_r(pathinfo('/home/example/www/file.txt')); |
Array
(
[dirname] => /home/example/www
[basename] => file.txt
[extension] => txt
[filename] => file
)
上記のように、連想配列には左側の[]
内にキー、右側に値が格納されています。
キーをecho
などで呼び出せば、キーに繋がった値が出力できます。
filepathのオプション一覧
filepath()
のオプションは以下の4つです。
オプション名 | 説明 | 例 |
---|---|---|
PATHINFO_DIRNAME | ディレクトリ名 | /home/example/www |
PATHINFO_BASENAME | ファイル名 | file.txt |
PATHINFO_EXTENSION | 拡張子 | txt |
PATHINFO_FILENAME | 拡張子なしのファイル名 | file |
realpath関数でフルパス取得
ファイルの絶対パスを取得します。
ファイル名からフルパスを取得
今度は逆にファイル名からフルパスを取得してみましょう。
1 2 |
// realpathにファイル名を指定 echo realpath('file.txt'); |
/home/example/www/file.txt
上記のようにフルパスで表示されました。