727 views
この記事は最終更新から 1804日 が経過しています。
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. 所感
・今後もちょくちょく情報を追記していこう。