• ベストアンサー

呼び出し先にさらに呼び出しがある場合について

PHPバージョン5.2.4を使っています。 index.phpからdir1ディレクトリにあるfile1.phpをrequireして使いたいのですが、 file1.phpもdir1ディレクトリにあるfile2.phpをrequireしているので 次のような呼び出し方ならうまく作動するのですが、 [index.php] define('DIR', realpath(dirname(__FILE__))); require_once 'dir1/file1.php'; [dir1/file1.php] require_once DIR.'/file1.php'; [dir1/file2.php] print "file2表示"; 次のようにindex.phpをdir1ディレクトリに移動させて実行すると file1.phpのrequireでエラーが出てしまいます。 [dir1/index.php] define('DIR', realpath(dirname(__FILE__))); require_once 'dir1/file1.php'; このような呼び出し先の中にさらに別の呼び出しがある場合は どのように記述すればindex.php(実行するファイル)を 別のどんな場所に移動させても作動させることができるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#77845
noname#77845
回答No.2

#1です。 どこに移動させても同じように参照させるには絶対パスで記述しましょう。 今の記述方法はあくまでも「index.php」からの相対パスを表しています。 なので、 "/~/~/dir1/file1.php とルートからのパスを記述すれば動くようになります。 (因みに、「~」は質問者の環境に合わせて変更しましょうね。)

takagoo100
質問者

お礼

ご返答ありがとうございます。 DIRを使わずに(dir1/file1.phpの中はrequire_once 'file2.php'にして)index.phpに 絶対パスを記述したらできました。ありがとうございます。

その他の回答 (2)

  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

define('DIR', realpath(dirname(__FILE__))); これが諸悪の根源でしょう。 パスの記述は面倒でも全て手で書くべきです。 上記のやりかただと「値上は絶対パスだがやってることは相対パス」となります。 あとから変えねばならない、といった状況を作らないためには 制作に入る前に十二分な仕様定義と考察が必要なわけですけどね。 逆に言えば「後から変えねばならないシステムなんて窓から捨ててしまえ」なわけですが。

takagoo100
質問者

お礼

ご返答ありがとうございます。 今まで使う側(index.php)のパスを基準に考えていたのですが ライブラリへの絶対パスを手動で書くことにより解決しました。ありがとうございます。

noname#77845
noname#77845
回答No.1

require_once 'dir1/file1.php';  ↓ require_once 'file1.php'; 最初は、 ¥┬index.php  └dir1┬file1.php ←これを読もうとしている。     └e.t.c. にあるfile1.phpを読みに行っていますが、index.phpをdir1に移動させた後は、 ¥┬  └dir1┬index.php     └dir1─file1.php ←これを読もうとしている。 を読みに行こうとしています。

takagoo100
質問者

お礼

ご返答ありがとうございます。 まず訂正があります。 [dir1/file1.php] require_once DIR.'/file1←じゃなくてfile2.php'; すいませんでした。 edomin2004さん言ってることは理解できたのですが、 そのうえでこのようなindex.php(実行ファイル)をどこに移動させても 例えばある一ヶ所だけを変えるだけで作動できるようにすることは無理なのでしょうか? DIRを使わずにやった場合は、index.phpがfile1.php、file2.phpと同じディレクトリにある場合しか作動しません・・・ 要はfile1.phpをライブラリとして使いたく、でもfile1.phpでもさらにrequireするファイルがあるのでうまくいかないのですが、 なにか解決する方法はないでしょうか?

takagoo100
質問者

補足

すいません、 edomin2004さん言ってることは→edomin2004さんの言ってることは

関連するQ&A