require
またはを使用しようとするとrequire_once
、必要なファイルが同じサブディレクトリにある場合は正常に機能しますが、サブディレクトリの外にあるファイルを見つけた瞬間に致命的なエラーが発生します。基本的に、ファイル ツリーは次のようになります。
* main.php
+ login/
* login.php
+ includes/
* session.php
...基本的に、main.php が login/login.php を要求するようにすれば問題ありませんが、login.php が includes/session.php を要求するようにディレクトリ トラバーサルを実行しようとすると失敗し、エラー:
PHP 致命的なエラー: require_once(): 必要なファイルを開くのに失敗しました [...]
この概念のコードは次のようになります。
require('login/login.php') #works fine (main.php)
require('../includes/session.php') #quits (login.php)
$_SERVER('DOCUMENT_ROOT')
、$_SERVER('SERVER_ADDR')
、dir(_FILE_)
、およびを使用してみchdir(../)
ました。数か月前にこの問題を解決したプロジェクトに取り組んだことを覚えています。これはファイルパスをトラバースする単純な関数でしたが、もう見つかりません。何か案は?