アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

PHPでファイルパスを扱うときのいろいろ

主にファイルパスの文字列をもにょもにょわちゃわちゃしたりするときに使うやつ。

きれいなパスをつくってくれるやつ

<?php
$path = "./../hoge/";
echo( realpath($path) );

例えば
/var/hoge/ というディレクトリが存在する状態で
/var/www/ から上記コードを実行すると、
いろいろ解決して「 /var/hoge 」を返してくれます。
最後のスラッシュは付かないことに注意。
指定パスがそもそも存在しないときはfalseを返してくれます。

PHP: realpath - Manual

ファイルパスをディレクトリやファイル名や拡張子に分割してくれるやつ

<?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

PHP: dirname - Manual
PHP: basename - Manual