LoginSignup
6
4

More than 5 years have passed since last update.

パス末尾 `/` の有無を統一する

Last updated at Posted at 2014-04-04

入力されるパスはファイルかもしれないしディレクトリかもしれない。

ディレクトリが指定されるときも/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` とかやる。てきとー。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4