入力されるパスはファイルかもしれないしディレクトリかもしれない。
ディレクトリが指定されるときも/var/tmp/hoge
かもしれないし 、ひょっとすると/var/tmp/hoge/
かもしれない、ってとき。
$finfo = pathinfo($input);
$path = $finfo['dirname'] . '/' . $finfo['basename'];
pathinfo()
は配列を返すのだけれど、basename
, dirname
は常にあるのに対して、filename
, extension
はキーが存在しないことがあるので要注意。つまりはisset
で慎重に確認しながら利用する必要があるのだけれど、それが嫌な場合はSplFileInfoとか使ってみるといいんじゃないかな。
挙動は下記のようなコードを実行することで確認できる。
$filenames = [
'',
'/',
'/foo',
'/foo/bar',
'/foo/bar/',
'/foo/bar/',
'/foo/bar/buz',
'/foo/bar/buz.',
'/foo/bar/buz.txt',
];
foreach ($filenames as $f) {
echo "\"$f\" => ";
var_dump(pathinfo($f));
}
⇒ 実行結果
ちなみにシェルだと(僕は) echo `dirname $1`/`basename $1`
とかやる。てきとー。