PHPプログラミング

レシピ

ファイル / ディレクトリ

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

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

この記事のポイント

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

目次

相対パスから絶対パスを取得できる

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

コード例

realpath('./test.txt');

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

取得結果の例

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

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

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

使用例

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

コード例

// ファイルへのパス
$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

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。