(67) PHPでファイルの絶対パスから情報を抽出

投稿者: | 2020年2月14日

1. やりたいこと

PHPプログラムを書いていて
ファイルの絶対パスから任意の情報を抽出したい
時がある。

2. やってみる

Case 1 : ファイルパス、ディレクトリパスの末端の要素を取得する。

関数 basename で指定したパスの末端の要素を取得できる。

echo basename("/home/hoge/public_html/www.dogrow.net/test/memo.txt");

実行結果は以下の通り。
ファイルの絶対パスからファイル名を取得できた。

memo.txt

Case 2 : 親ディレクトリ名を取得する。

関数 dirname で指定したパスの末端から n個目の親要素を取得できる。

echo  dirname("/home/hoge/public_html/www.dogrow.net/test/memo.txt");

実行結果は以下の通り。
第二パラメーターを指定しなかった場合は一つ上の親要素を取得する。

/home/hoge/public_html/www.dogrow.net/test

第二パラメーターで、明示的に n番目の親要素を指定 することが出来る。

echo  dirname("/home/hoge/public_html/www.dogrow.net/test/memo.txt", 1);
echo  dirname("/home/hoge/public_html/www.dogrow.net/test/memo.txt", 2);
echo  dirname("/home/hoge/public_html/www.dogrow.net/test/memo.txt", 3);

実行結果は以下の通り。

/home/hoge/public_html/www.dogrow.net/test
/home/hoge/public_html/www.dogrow.net
/home/hoge/public_html

Case 3 : 汎用パス情報取得関数 pathinfo を使う。

汎用パス情報取得関数 pathinfo を使うと、いろいろな情報をまとめて取得できる。

$info = pathinfo("/home/hoge/public_html/www.dogrow.net/test/memo.txt");
var_dump($info);

実行結果は以下の通り。
返された連想配列にいろいろな情報が格納されている。

array(4) { ["dirname"]=> string(42) "/home/hoge/public_html/www.dogrow.net/test" ["basename"]=> string(8) "memo.txt" ["extension"]=> string(3) "txt" ["filename"]=> string(4) "memo" } 

取得したい情報を指定することも出来る。

echo pathinfo("/home/hoge/public_html/www.dogrow.net/test/memo.txt", PATHINFO_DIRNAME);
echo pathinfo("/home/hoge/public_html/www.dogrow.net/test/memo.txt", PATHINFO_BASENAME);
echo pathinfo("/home/hoge/public_html/www.dogrow.net/test/memo.txt", PATHINFO_FILENAME);
echo pathinfo("/home/hoge/public_html/www.dogrow.net/test/memo.txt", PATHINFO_EXTENSION);

実行結果は以下の通り。

/home/hoge/public_html/www.dogrow.net/test
memo.txt
memo
txt

3. 応用

(1) 親ディレクトリの名前を取得する。

カレントディレクトリに存在する memo.txt
/home/hoge/public_html/www.dogrow.net/test/memo.txt
の親ディレクトリの名前を取得する。

$str1 = realpath("./memo.txt");
$str2 = dirname($str1);
$str3 = basename($str2);
echo $str3;
$str = basename(dirname(realpath("./memo.txt")));
echo $str;

どちらの場合も実行結果は以下の通り。
memo.txtの親ディレクトリ名が取得できている。

test

4. 所感

・今後もちょくちょく情報を追記していこう。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)