require_onceの安全なパス設定方法について

PHP

PHPでrequire_onceのパスを設定する場合は、安全なパス設定にしないといけません。

では、実際に検証しつつ、説明していきますね。


こういったフォルダ構成で

 

 

で、views/index.phpをブラウザで読み込んでみると、

 

という感じで正常に動作します。

 

 

では、次にviewsディレクトリの中にpostディレクトリを作成。

また、views/post/index.phpも作成します。

先ほどと同様に、views/post/index.phpを読み込むとエラーとなります。

Warning: require_once(../library/Validate.php): failed to open stream: No such file or directory in /Applications/MAMP/htdocs/test/class/User.php on line 2
Fatal error: require_once(): Failed opening required '../library/Validate.php' (include_path='.:/Applications/MAMP/bin/php/php7.2.7/lib/php') in /Applications/MAMP/htdocs/test/class/User.php on line 2

 

上記のようにエラーが出るでしょう。

 

これは、User.phpの2行目でrequire_onceが出来なかったことによるエラーです。

PHPの相対パスの起点は呼び出し元のファイルのディレクトリからのパスになります。

つまり、実行したファイルのあるディレクトリが常に実行時のカレントディレクトリになるのです。

ここでは、views/post/index.phpとが実行ファイルなので、そのディレクトリpostが起点です。

 

なので、

PHPではこのような相対パスでincludeのパスを書くと、

class/User.phpが以下のようだと、

views/post/index.phpを実行したとき、動かなくわけです。

class/User.phpを上記のように修正すると、views/post/index.phpは動きますが、

 

今度はviews/index.phpを実行したとき、エラーとなるでしょう。

 

 

そこで、パスの設定を相対パスではなく絶対パスに変えることで解決します。

 

具体的には、

 

 

とすればOKです。