PHPにおける相対パス

すでにご存知のように、関数 file_get_contents のパラメータにはファイル名を記述します。しかし、これが機能するのは、 読み込むファイルが実行されるスクリプトと同じフォルダに ある場合のみです。

ファイルが別の場所にある場合、関数のパラメータには そのファイルへのパスを記述する必要があります。

例を見てみましょう。

例

次のようなファイル構造があるとします:

テキストファイルの内容を読み取ってみましょう。 このためには、ファイル名に加えて、 ファイルが置かれているフォルダも指定する必要があります:

index.php<?php
  echo file_get_contents('directory/test.txt');
?>

例

次のようなファイル構造があるとします:

この場合、ファイルへのパスとして単にその名前を指定して ファイルを読み取ろうとすると、エラーで終了します:

script/index.php<?php
  echo file_get_contents('test.txt'); // エラーが発生します
?>

なぜエラーが発生するのでしょうか?それは、関数のパラメータに ファイル名を記述したためです。これは、 読み込むファイルが実行されるファイルと同じフォルダに 配置されている必要があることを意味します。

しかし、私たちの読み込むファイルは1つ上のレベル、 つまりスクリプトを含むフォルダを包含するフォルダに 存在しています。

この場合、ファイルへのパスに、そのファイルを1つ上のレベルで 探す必要があることを明示的に指定しなければなりません。 そのためには、ファイル名の前に ../ と記述します。 これを行ってみましょう:

php<?php
  echo file_get_contents('../test.txt'); // ファイルが読み取られます
?>

例

次のようなファイル構造があるとします:

この場合、ファイルを読み取る際に、まず1つ上のレベルに出て、 その後、そのレベルを基準としたファイルへのパスを指定します:

script/index.php<?php
  echo file_get_contents('../directory/test.txt');
?>

例

次のようなファイル構造があるとします:

この場合、上に2回出る必要があります:

script/test/index.php<?php
  echo file_get_contents('../../directory/test.txt');
?>

実践的な課題

Задание 1

テキストファイルの内容を読み取るコードを 記述してください:

  • index.php
  • /dir1//dir2/test.txt
Задание 2

テキストファイルの内容を読み取るコードを 記述してください:

  • /script/index.php
  • /dir1//dir2/test.txt
Задание 3

テキストファイルの内容を読み取るコードを 記述してください:

  • /script1//script2/index.php
  • /dir/test.txt
Задание 4

テキストファイルの内容を読み取るコードを 記述してください:

  • /script1//script2//script3/index.php
  • /dir1//dir2//dir3/test.txt