PHPプログラミング

最終更新日:
公開日:

レシピ

ファイル / ディレクトリ

ファイルの相対パスから絶対パスを取得する

realpath関数を使って指定した相対パスから絶対パスを取得する方法を解説します。

この記事のポイント

  • 指定したパスの絶対パスを取得する
  • パスはディレクトリのパーミッションが読み取りを許可している場合のみ取得できる

目次

指定した相対パスから絶対パスを取得する

realpath関数はパスを渡すとシンボリックリンクを全て展開して絶対パスを求めることができます。

PHP コード例

realpath('./test.txt');

このように相対パスを渡すと、次のような絶対パスが返ってきます。

取得結果の例

/Users/testuser/Sites/test-site/test

パスの先が存在しないなどの理由で絶対パスを取得できなかった場合はfalseを返します。

なお、パスを取得するには対象となるディレクトリ(またはファイル)のパーミッションが読み取りを許可している必要があります。

使用例

特定のディレクトリ内にあるファイルを全て取得し、それぞれの絶対パスを取得するコードを紹介します。

PHP コード例

// ファイルへのパス
$path = './test/';

// ディレクトリ内のファイルリストを取得
$files = scandir($path);

foreach( $files as $file_name ) {

	// 対象パスがファイルかを確認
	if( is_file($path.$file_name) ) {
		
		// 絶対パスを取得して出力
		echo realpath( $path.$file_name ).'<br>';
	}
}

まずscandir関数で「test」ディレクトリ内のファイル一覧を取得し、foreach文で取得したファイル(またはディレクトリ)の数だけループ処理を実行します。

if文is_file関数を使ってファイルであるかを確認し、ファイルの場合はrealpath関数を実行して絶対パスを取得し出力するという流れです。

絶対パスの出力例

/Users/testuser/Sites/test-site/test/.htaccess
/Users/testuser/Sites/test-site/test/data.txt
/Users/testuser/Sites/test-site/test/data2.txt
/Users/testuser/Sites/test-site/test/index.html