1

私はさまざまなPHPアプリケーションを開発し、さまざまな環境にデプロイしています。特に開発環境では、document_rootから/ Users / me / Sites /、さらには/ Users / me / Sites /someapp/までどこにでも配置できます。

これらのアプリケーション内で、「アプリケーションルート」がどこにあるかを知る必要があります。1回は実際のパスとして、もう1回はURLとしてです。パスは問題ありません。アプリのルートディレクトリにbootstrap.phpがあり、次のようになっているとします。

define("BASE_DIR", realpath(dirname(__FILE__)));

ただし、ベースURLを確実に取得するには問題があります。ほとんどの環境では、BASE_DIRからドキュメントルートを差し引くだけで機能します。

define("BASE_URL", str_replace($_SERVER['DOCUMENT_ROOT'],'',BASE_DIR) . "/");

今、私の問題は次のとおりです。PHPはまだメインのドキュメントルートを認識しているため、これは私のアプリがユーザーディレクトリ内にある環境では機能しません。誰かがこの問題を解決しましたか?

4

1 に答える 1

4

サーバーにエイリアスが設定されている場合、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

$_SERVER['SCRIPT_NAME']URLのパス/スクリプト名部分である に基づいて URL を再構築する方がよい場合があります。

$_SERVER['SCRIPT_NAME'] -> /testalias/script.php
于 2011-01-08T17:16:00.497 に答える