PHP:ユーザーディレクトリ内からドキュメントルートを取得するにはどうすればよいですか?
-
08-10-2019 - |
質問
さまざまな環境にさまざまなPHPアプリケーションを開発および展開しています。特に開発環境では、document_rootから/users/me/sites/または/users/me/sites/someapp/someappまで、どこにでもいることができます。
これらのアプリケーション内では、「アプリケーションルート」がどこにあるかを知る必要があります。一度は実際のパスとして、一度はURLとしてです。パスは問題ありません。 App Root DirectoryにBootstrap.phpを持っているとしましょう。
define("BASE_DIR", realpath(dirname(__FILE__)));
ただし、ベースURLを確実に取得するための問題があります。ほとんどの環境では、base_dirの動作からドキュメントルートを単純に差し引くだけです。
define("BASE_URL", str_replace($_SERVER['DOCUMENT_ROOT'],'',BASE_DIR) . "/");
さて、私の問題は次のとおりです。これは、PHPがまだメインドキュメントルートを見ているため、アプリがユーザーディレクトリ内にある環境では機能しません。誰かがこの問題を解決しましたか?
解決
RealPath()とdocument_rootを含むすべてのものは、サーバーがエイリアスを構成している場合、激しく故障します。 Apacheがこのような構成を持っているシナリオを考えてみましょう。
DocumentRoot /home/httpd/html
Alias /testalias /home/otherdir
そして、あなたはでスクリプトにアクセスします example.com/testalias/script.php
.
スクリプトが返されます:
realpath(dirname(__FILE__)) -> /home/otherdir
$_SERVER['DOCUMENT_ROOT'] -> /home/httpd/html
BASE_DIR -> /home/otherdir
BASE_URL -> /home/otherdir/
それでも、サイトの残りの部分は実際に存在します /home/httpd/html
あなたは、に基づいてURLを再構築するより良い運があるかもしれません $_SERVER['SCRIPT_NAME']
, 、これがURLのパス/スクリプト名部分です:
$_SERVER['SCRIPT_NAME'] -> /testalias/script.php
所属していません StackOverflow