⊗ppPmFSRP 334 of 447 menu

PHPにおける相対パス

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

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

例を見てみましょう。

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

  • index.php
  • /directory/
    • test.txt

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

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

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

  • /script/
    • index.php
  • test.txt

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

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

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

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

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

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

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

  • /script/
    • index.php
  • /directory/
    • test.txt

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

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

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

  • /script/
    • /test/
      • index.php
  • /directory/
    • test.txt

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

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

実践的な課題

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

  • index.php
  • /dir1/
    • /dir2/
      • test.txt

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

  • /script/
    • index.php
  • /dir1/
    • /dir2/
      • test.txt

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

  • /script1/
    • /script2/
      • index.php
  • /dir/
    • test.txt

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

  • /script1/
    • /script2/
      • /script3/
        • index.php
  • /dir1/
    • /dir2/
      • /dir3/
        • test.txt
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否