入力されるパスはファイルかもしれないしディレクトリかもしれない。
ディレクトリが指定されるときも/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` とかやる。てきとー。