2011-01-08 3 views
1

さまざまなPHPアプリケーションをさまざまな環境に開発して展開します。特に、開発環境では、document_rootから/ Users/me/Sites /または/ Users/me/Sites/someapp/PHP:ユーザーディレクトリ内からドキュメントルートを取得するには?

のいずれかの場所にあることができます。これらのアプリケーションの中で私は 'アプリケーションルート'実際のパスとして1回、URLとして1回。パスは問題ありません。のは、私が行うアプリケーションのルートディレクトリにbootstrap.phpのを持っているとしましょう:

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

はしかし、私は確実にベースURLを取得するために問題を抱えています。単にBASE_DIRからドキュメントルートを引いほとんどの環境で動作します:

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

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

+0

[アプリケーションのベースURLをどのように見つけることができますか?](http://stackoverflow.com/questions/176712/)どのように私は見つけることができますアプリケーションベースURL) – alexn

+0

ありがとう、しかし、私はちょうどそこに解決策を試して、結果は与えられたコードを含むファイルの場所によって異なります。 – Stefan

+0

または、むしろ:解決策はbootstrap.phpが常にルートディレクトリにあることを要求します(わかりやすくするために、私は "includes /"ディレクトリにあります)。しかし、私は、最も簡単な解決策は、トップに移動し、ここにリンクされたソリューションを使用することだと思います。 – Stefan

答えて

4

サーバのエイリアスが設定されていると、realpath()とDOCUMENT_ROOTに関わるものはすべて失敗します。

DocumentRoot /home/httpd/html 
Alias /testalias /home/otherdir 

そして、あなたはexample.com/testalias/script.phpでスクリプトにアクセス:Apacheのは、このような構成を持ってシナリオを検討してください。

スクリプトが返されます:

realpath(dirname(__FILE__)) -> /home/otherdir 
$_SERVER['DOCUMENT_ROOT'] -> /home/httpd/html 
BASE_DIR -> /home/otherdir 
BASE_URL -> /home/otherdir/ 

、まだのサイトの残りの部分は、実際にあなたがパス/スクリプト名です$_SERVER['SCRIPT_NAME']に基づいてURLを再構築するより良い運を持っているかもしれません/home/httpd/html

に存在しますURLの部分:

$_SERVER['SCRIPT_NAME'] -> /testalias/script.php 
+0

解決策はalexnによって可能な重複としてリンクされたものです。私は彼が正しいと思う、質問は同じですが、私はまだソリューションがアプリケーションルートのブートストラップファイルでのみ動作すると思います。 http://stackoverflow.com/questions/176712/how-can-i-find-an-applications-base-url/185725#185725 – Stefan

+0

私は別名ディレクトリstr_replace($ _ SERVER ['SCRIPT_NAME' ]、 ''、$ _SERVER ['SCRIPT_FILENAME']) – kiranvj

+0

SCRIPT_NAMEの問題は、現在実行中のスクリプトの名前に基づいているため静的ではないことです。 Apache 2.3.xが一般的に採用される前に、CONTEXT_PREFIX変数を使用することができます。私は解決策がないのではないかと心配しています。 – devXen

関連する問題