質問: こんにちは。 PHPのrequire_onceでPHPファイルを呼び出そうとしているのですが、呼び出しができません。 例えば main.php require_once(a.php) は呼び出すことが出来るのですが main2.php require_once(a.php) はa.phpを呼び出すことができません。 main.phpとmain2.phpは同一の階層にいます。 ファイルごとに設定などあるのでしょうか? 環境 CentOS 6.7 PHP Version 5.3.3 よろしくお願いいたします。
回答: 必ずしも適切な回答ではないかもしれませんが,相対パスによる指定は**スクリプト実行が開始されたディレクトリパス**が起点になることに注意してください.例えばa.phpを起点として a.php →(require)→ foo/b.php →(require)→ foo/bar/c.php のように呼び出したい場合,b.phpに記述されるのは ``` require 'foo/bar/c.php'; ``` となります.これでは**b.phpを単独で起点にした場合に整合性がとれなくなる**ため,生の相対パスでrequireを書くのはおすすめしません. (推測になりますが,質問事項に関して引っかかっている点はここではないでしょうか?) ではどうすればいいかというと,マジック定数`__DIR__`を用いて絶対パスを組み立てるべきです.この定数はファイルごとに固有で,**ファイルが置かれているディレクトリパス**が起点になります.この場合は ``` require __DIR__ . '/bar/c.php'; ``` のようになります.