PHP:ユーザーディレクトリ内からドキュメントルートを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4634869

質問

さまざまな環境にさまざまな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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top