PHPでファイルパスを扱うときのいろいろ
主にファイルパスの文字列をもにょもにょわちゃわちゃしたりするときに使うやつ。
きれいなパスをつくってくれるやつ
<?php $path = "./../hoge/"; echo( realpath($path) );
例えば
/var/hoge/ というディレクトリが存在する状態で
/var/www/ から上記コードを実行すると、
いろいろ解決して「 /var/hoge 」を返してくれます。
最後のスラッシュは付かないことに注意。
指定パスがそもそも存在しないときはfalseを返してくれます。
ファイルパスをディレクトリやファイル名や拡張子に分割してくれるやつ
<?php $path = "/var/www/hoge.php"; var_dump( pathinfo($path) );
これを実行すると以下のような表示になります。
ディレクトリパス・ファイル名・拡張子・拡張子なしファイル名がわかります。
どうやら文字列を解析しているだけのようで、ファイルが存在しなくてもやってくれます。
array(4) { ["dirname"]=> string(8) "/var/www" ["basename"]=> string(8) "hoge.php" ["extension"]=> string(3) "php" ["filename"]=> string(4) "hoge" }
ドットから始まるファイル名など、特殊なパターンでは意図通りの動きにならないかもしれません。
PHP: pathinfo - Manual
第二引数に以下パラメータのいずれかを渡すことで、特定の要素のみを受け取ることもできます。
- PATHINFO_DIRNAME
- PATHINFO_BASENAME
- PATHINFO_EXTENSION
- PATHINFO_FILENAME
これひとつを覚えておけばとりあえずOKそうですが、
以下のように「dirname」「basename」関数を使うこともできます。
<?php $tmppath = "/var/www/hoge.php"; echo( dirname($tmppath) ); // /var/www echo( basename($tmppath) ); // hoge.php var_dump( basename($tmppath, ".php") ); // hoge