51

次のファイル構造があります。

rootDIR
    dir1
        サブディレクトリ1
           file0.php
           file1.php
    dir2
       file2.php
       file3.php
       file4.php   

file1.phpfile3.php次のようなfile4.phpdir2が必要です。

require('../../dir2/file3.php')

file2.php次のように必要file1.phpです:

require('../dir1/subdir1/file1.php')

しかし、require infile1.phpが開かfile3.phpず、file4.php(パスの相対性が原因である可能性があります)

しかし、その理由は何ですか?また、適切に必要とするにはどうfile2.phpすればよいですか?file1.phpfile3.phpfile4.php

4

5 に答える 5

55

dirname(__FILE__)次のように、パスの前に追加してみてください。

require(dirname(__FILE__).'/../../dir2/file3.php');

ルートディレクトリから始まるファイルを含める必要があります

于 2012-10-18T12:38:28.570 に答える
5

実行可能な推奨事項は、PHP Web アプリで「../../」相対パスを避けることです。読みにくいし、メンテナンスが大変。

  1. あなたが証明できるように。あなたが何を指しているのかを知ることは非常に困難です。

  2. アプリケーションのフォルダ レベルまたはその一部を変更する必要がある場合。これは完全にエラーになりやすく、デバッグが困難なものを壊してしまう可能性があります。

代わりに、優先されるパターンはdefine、ブートストラップ ファイル内のいくつかの定数をメイン パスとして使用することです。

require(MY_DIR.'/dir1/dir2/file3.php');

MY_DIRそこからアプリを移動するのは、1 つのファイルで定数を置き換えるのと同じくらい簡単です。

相対的に保つ必要がある場合。少なくとも、受け入れられた応答が示唆するように、相対パス参照に基づいて絶対パスを作成します。../ただし、混乱やあいまいさを取り除く手段として、匿名の中間パスに名前を付けることが重要であることも強く心に留めておいてください。

于 2015-03-03T02:52:03.937 に答える
-2

あなたのcwdはdir2だと思います。試す :

require("file3.php");
require("file4.php");
于 2012-10-18T12:49:14.750 に答える