2011-07-16 17 views
10

私はPHPフレームワークを持っており、移植性を最適化するために$_SERVER['SCRIPT_NAME']を使用しました。そうすれば、手動でパスを手動で設定する必要はありません。

$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']); 

しかし、私は$_SERVER['SCRIPT_NAME']$_SERVER['PHP_SELF']がまったく同じ文字列を返すことに気づきました。では、違いは何ですか?どのように私はそれらの間で選択すべきですか?

+0

マニュアルは自明以上であります、http://in2.php.net/manual/en/reserved.variables.server。しかし、あなたのスクリプトはいくつかの要因によって制限されるかもしれません。ウェブホストはあなたの環境を設定して、scriptname index、btwの実際のファイルシステムパスを見ることができないかもしれません。 googlingに続いて、あなた自身でそれをやってもっと学びます:-) – Kumar

+1

ここで何度も読んでいます。私はそうでなければここで尋ねなかったでしょう。 –

+0

私のコメントで怒らないでください、私はちょうどマニュアルが言っていることに追加していた、あなたの答えを持って見てうれしく、私は自分自身の男の多くは、ほとんどファッションで私の答えを見つけることです – Kumar

答えて

9

違い

http://sandbox.phpcode.eu/g/3e38d.php/test 

スクリプト名は、ファイルへの絶対パスです。

PHP_SELFあなたは

イッツ(.php後に「パス」と一緒に)で、現在しているスクリプトスポット1つの違い

http://sandbox.phpcode.eu./g/f5093.php 

http://sandbox.phpcode.eu/g/f5093.php 

$_SERVER['SERVER_NAME']のようにして$_SERVER['HTTP_HOST']

+1

これは実際には非常に役に立ちました( –

+1

とあなたの質問もあります:) – genesis

+0

"スクリプト名はabsです" - SCRIPT_NAMEはルート相対であり、_絶対ではありません。 'SCRIPT_FILENAME'は絶対パスを含みますが(必ずしも' SCRIPT_NAME'と同じファイルである必要はありません)。 – MrWhite

7
SCRIPT_NAME 

現在のスクリプトのパスが含まれています。これは、自分自身を指す必要のあるページに役立ちます。 __FILE__定数には、現在の(つまりインクルードされている)ファイルの絶対パスとファイル名が含まれています。

PHP_SELF 

ドキュメントルートに対して現在実行中のスクリプトのファイル名。たとえば、http://example.com/test.php/foo.barというアドレスのスクリプト内の$_SERVER['PHP_SELF']は、/test.php/foo.barになります。 __FILE__定数には、現在の(つまりインクルードされている)ファイルの絶対パスとファイル名が含まれています。 PHPがコマンドラインプロセッサとして実行されている場合、この変数にはPHP 4.3.0以降のスクリプト名が含まれています。以前は利用できませんでした。

ソースphp.net

一つのことがあります: しようとしましたmysel:

http://www.yoursite.com/example/index.php/dir/test

をチェックアウトは$_SERVER['SCRIPT_NAME'] == '/example/index.php';

ETAに$_SERVER['PHP_SELF'] == '/example/index.php/dir/test';

にF localhostの http://127.0.0.1:8887/index.php/dir/test

echo $_SERVER['PHP_SELF'] . "<br />"; 
echo $_SERVER['SCRIPT_NAME']; 

出力にこれを試し

は次のとおりです。

/index.php/dir/test 
/index.php 
+0

この例題は '/ dir/test'を返すものは間違っています... –

+0

いいえ間違っていません。ここを見てください:http://sandbox.phpcode.eu/g/3e38d.php/test – genesis

+0

ここでの例では、ファイル名 'index.php'とそれとサーバ名との間に何があるのか​​を除外しています。@genesisリンクでは'/g/3e38d.php/test'を正しく返します。テスト ' –

関連する問題