[PHP] ファイルパスから名称(ベースネーム)を取得する

1 min read

以下のようなパスであれば

/usr/local/test/hoge.txt

hoge.txt

以下のようなパスであれば

/usr/local/test/

test

このように取得したいと思います。

basename(ベースネーム)は pathinfo()関数で取得できるのですが、マルチバイトが含まれてる場合にどうも動きがよくありません。(PHP のバージョンアップで解消される問題ではあるようなのですが)
ですので、今回は自前でベースネームを取得する関数を実装します。

ベースネーム取得関数


function get_basename($path) {
  // スラッシュ区切りで配列に格納
  $path_array = explode('/', $path);
  // 空の要素を排除する
  $path_array = array_filter($path_array, "strlen");
  // 一番後ろの文字列を取得
  return array_pop($path_array);
}

簡単な解説

/usr/local/test/hoge.txtを「/」で区切って配列へ格納。
Array
(
    [0] => 
    [1] => usr
    [2] => local
    [3] => test
    [4] => hoge.txt
)

0 番目に空文字も格納されているのでそれを削除。

最後に追加された文字を取得。(ここでは 4 番目)

使い方


$path = '/usr/local/test/hoge.txt';
get_basename($path);
// => hoge.txt