WEBサイトは多くのファイルで構成されています。それらは、色々なディレクトリに分類されて格納されているでしょう。このため、PHPでプログラミングする際には、プログラム内部でパスやディレクトリを扱う場面もありますね。
そんな時、PHPソースファイルがどんな配置に変更されても、ファイルを正しく読み書きするには、ファイルのパスを正確に把握する必要があります。
そんな時に便利な関数として、親ディレクトリのパスを返す関数dirnameおよび類似の関数の使い方を説明します。
PHPプログラミングに興味のある方は、プログラミング学習の参考として、ぜひ読んでみてください。
目次
関数dirnameの使い方
関数の説明
1 |
dirname ( string $path , int $levels ) |
機能:pathで指定された文字列をファイルあるいはディレクトリへのパスとみなして、 カレントディレクトリから levels レベルさかのぼった親ディレクトリのパスを返す。
パラメータ:
引数 | 型 | 説明 |
---|---|---|
path | string | ・パスを示す文字列。 ・ディレクトリ区切り文字としてwindowsは\(バックスラッシュ)も使用可。 |
levels | int | ・さかのぼるレベルを指示する。 ・省略時は1レベルさかのぼる。 |
戻り値:
- 親ディレクトリのパス
- pathから最後のスラッシュ以降の部分を取り除いた文字列
- path にスラッシュがなければ、 ‘.’(ドット:カレントディレクトリ)
使用例
1 2 3 4 5 6 7 8 |
<?php echo dirname("/etc/passwd") . PHP_EOL; echo dirname("/etc/") . PHP_EOL; echo dirname(".") . PHP_EOL; echo dirname("C:\\") . PHP_EOL; echo dirname("/usr/local/lib", 2). PHP_EOL; echo dirname("/www/htdocs/sample.php"). PHP_EOL; ?> |
結果
1 2 3 4 5 6 |
/etc \ . C:\ /usr /www/htdocs |
ファイルのパスとファイル名を知る便利な方法
PHPのプログラム内で、あるファイルのパスとファイル名を知りたい場合は、マジック定数と呼ばれるPHPで定義済の定数「FILE」を使うと便利です。
マジック定数は使われる場所によって値が変化する定数です。
__FILE__ | ・ファイルのフルパスとファイル名 (シンボリックリンクを解決した後のもの)。 ・インクルードされるファイルの中で使用された場合、インクルードされるファイルの名前を返す。 |
そして、(FILE)と記述することで、記述したファイルが配置されているディレクトリを知ることができます。また、これは、マジック定数DIRでも取得できます。
__DIR__ | そのファイルの存在するディレクトリ。 |
ファイルパスについては、以下も参考にしてください。
留意事項
dirnameはファイルシステムを調べるか?
第1引数pathで指定された文字列をパス記述みなしてそれを解析した結果を返します。実際のファイスシステムやディレクトリを調べることはありません。
相対パスの場合はどうなるか?
相対パスを含む場合は、結果も相対パスで返されます。
(pathで指定された文字列の最後のスラッシュとそれ以降の要素を取り除いた文字列が返されるため)
拡張子のないファイル名を含む場合はどうなるか?
最後のスラッシュに続く要素がファイル名であるかディレクトリ名であるかに関係なく、最後のスラッシュとそれ以降の要素を取り除いた文字列が返されます。
HTMLの「相対パス」「絶対パス」については以下も参考にしてください。
類似の関数
パスやディレクトリを扱う際に便利な関数をいくつか紹介します。
basename
機能概要:パスからファイル名を取得
1 |
basename ( string $path , string $suffix ) |
パラメータ:
引数 | 型 | 説明 |
---|---|---|
path | string | ・パスを示す文字列。 ・ディレクトリ区切り文字としてwindowsは\(バックスラッシュ)も使用可。 |
suffix | string | ・名前からカットしたいサフィックスを指定する。 ・省略時はサフィックスの指定なしとして名前部を全て返す。 |
戻り値:
- パスの最後にある名前の部分を返す。
- nullでないsaffixを指定した場合、その部分もカットされる。
使用例
1 2 3 |
<?php echo basename('/www/htdocs/sample.php') , PHP_EOL; ?> |
結果
1 |
sample.php |
realpath
機能概要:正規化された絶対パス名を返す
1 |
realpath ( string $path ) |
パラメータ:
引数 | 型 | 説明 |
---|---|---|
path | string | ・パスを示す文字列。 ・ディレクトリ区切り文字としてwindowsは\(バックスラッシュ)も使用可。 ・nullの場合は、カレントディレクトリを指定したものとみなす。 |
戻り値:
- 正規化された絶対パス
- シンボリックリンクは展開される。
- ”
/./"
、”/../
“および”/
”は絶対パスに展開される。
使用例
1 2 3 4 |
<?php echo 'pwd: ', exec('pwd'), PHP_EOL; echo 'realpath: ', realpath('./../../user/test') , PHP_EOL; ?> |
結果
1 2 |
pwd: /home/user/test realpath: /home/user/test |
getcwd
機能概要:カレントのワーキングディレクトリを取得
1 |
getcwd() |
パラメータ:
引数 | 型 | 説明 |
---|---|---|
なし |
戻り値:
- カレントのワーキングディレクトリを返す。
- 失敗時はfalseを返す。
使用例
1 2 3 4 |
<?php echo exec('pwd'), PHP_EOL; echo getcwd(), PHP_EOL; ?> |
結果
1 2 |
/home/user/test /home/user/test |
pathinfo
機能概要:ファイルパスに関する情報を返す
1 |
pathinfo ( string $path , int $flags ) |
パラメータ:
引数 | 型 | 説明 |
---|---|---|
path | string | ・パスを示す文字列。 ・ディレクトリ区切り文字としてwindowsは\(バックスラッシュ)も使用可。 |
flags | int | ・PATHINFO_DIRNAME、 PATHINFO_BASENAME、 PATHINFO_EXTENSION 、PATHINFO_FILENAME のいずれかで指定 ・省力時は全てを指定したものとみなす。 |
戻り値:
- flagを指定しない場合は、dirname、basename、 extension (存在すれば)、filenameを含む連想配列を返す。
- flagsを指定すると、 要求した要素を文字列で返す。
使用例
1 2 3 4 |
<?php $path_parts = pathinfo('/www/htdocs/sample.php'); print_r($path_parts); ?> |
結果
1 2 3 4 5 6 7 |
Array ( [dirname] => /www/htdocs [basename] => sample.php [extension] => php [filename] => sample ) |
なお、以下の記事も、ファイルの読み書きをするときの参考にしてください。
まとめ
いかがでしたか? 今回は、関数dirnameの使い方を中心にディレクトリやパスの扱い方について説明しました。
これらの関数をうまく利用してディレクトリやファイルのパスを柔軟に扱うことで、<strongシステムのメンテナンスが楽になります。
この記事が、PHPプログラミング習得の参考としてお役に立てば幸いです。