目的
- ファイルパスやURLから最後のファイル名や拡張子などを取得する方法をまとめる
詳細
- 下記のサービスを用いて今回紹介するコードの検証を行った。
方法
/
で区切られた最後のフィールドを取得する。
-
https://qiita.com/miriwo
のmiriwo
の部分を取得したい場合、下記の様に記載する。<?php $path = 'https://qiita.com/miriwo'; $endFeald = substr($path, strrpos($path, '/') + 1); echo $endFeald; // 「miriwo」 と出力される
ファイルパスからファイルの拡張子を取得する。
-
/etc/nginx/conf.d/default.conf
のdefault.conf
ファイルの拡張子部分conf
のみを取得したい場合、下記の様に記載する。<?php $filePath = '/etc/nginx/conf.d/default.conf'; $extensions = substr($filePath, strrpos($filePath, '.') + 1); echo $extensions; // 「conf」と出力される
簡単な解説
- 使用している文字列を操作する関数を分解してどんなことをしているのか詳しく見てみる。
strrpos()
-
下記の様に呼び出す。
strrpos(評価対象の文字列, 区切り文字列, どこから数え始めるか): 数値か文字列を返す。
-
下記の様に記載した場合、「$pathの文字列の最後の'/'は$pathに格納されている文字列の1番目から何文字目(何バイト目)である」を出力している事となる。
echo strrpos($path, '/',);
substr()
-
割とよく使うPHPではおなじみの文字列の中からその一部を抜き出す関数である。
-
下記の様に呼び出す。
substr(評価対象の文字列, 文字列を抜き出す開始位置, 文字列を抜き出す開始位置からの長さ(バイト数)): 抜き出した文字列を返す。
-
ちなみに「文字列を抜き出す開始位置からの長さ(バイト数)」を指定しなかった場合「文字列を抜き出す開始位置」から文字列の最後までを返す。
-
下記の様に記載した場合、「$strの文字列の10文字目(10バイト目)から文字列の最後までを切り出して返す」処理を行っている事となる。
substr($str, 10);
合わせると
-
substr($path, strrpos() + 1)
なので -
substr($path, strrpos()にて返される最後の区切り文字までの文字数 + 1)
となり -
substr($path, 最後の区切り文字から+1文字した数値)となるため、
strrpos()`で指定した区切り文字の後ろの文字列を取得する事ができる。