0

私は $_SERVER[DOCUMENT_ROOT] を頻繁に使用して、すべてのリンクが適切に機能するようにしています。例えば:

<link href="' . $_SERVER[DOCUMENT_ROOT] . '/favicon.ico" rel="icon" />

含まれているファイルの実際のパスは関係ありません。ドキュメント ルートを基準とした favicon の正しい場所が常に検索されます。

これはすべて、私の Web サーバーで期待どおりに機能します。ただし、私のローカル開発サーバー (Windows 7、Apache 2.2、構成された仮想ホスト) では、正しいパス (C:/Local/MySite) を指していますが、実際には何も起こりません (ファビコンが機能せず、スタイルシートと画像が機能しません)。ロードされるなど)

$_SERVER[DOCUMENT_ROOT] をローカルで動作させる方法はありますか?

"http://" と $_SERVER[HTTP_HOST] ( ) を使用すると、同じ期待される結果が得られることがわかりました。それ<link href="http://' . $_SERVER[HTTP_HOST] . '/favicon.ico" rel="icon" />を行うことの欠点はありますか? または、引き続き $_SERVER[DOCUMENT_ROOT] を使用し、サーバーの書き換えルールを使用してローカルで実行されるものに解析し、ブラウザにはそのままにしておくこともできます。

4

2 に答える 2

3

$_SERVER[DOCUMENT_ROOT]はWebサイトのルートディレクトリへのパス全体であり、リンクや画像で見事に失敗するはずです。

さて、そうは言っても、これまでのところは問題ありません...ただし$_SERVER[HTTP_HOST]、接続がHTTP / 1.1を使用して行われ、クライアントがHostヘッダーを発行する場合にのみ機能します。 $_SERVER[SERVER_NAME]ただし、常に機能するはずです。仮想ホストのメインアドレスを使用することに注意して$_SERVER[SERVER_NAME]ください。したがって、サーバーにエイリアスがある場合は...

于 2012-04-05T14:37:57.083 に答える
1

ドキュメント ルートはサーバー上のローカル パスであり、ブラウザーがサイトを見る限り、URL 空間では何の意味もありません。

あなたのhtmlが持っている場合

<img src="c:/site/html/favicon.ico" />

ユーザーのブラウザに、そのファビコンをユーザー自身のローカル ドライブから読み込もうとするように指示します。これは機能しないだけでなく、ユーザーが Windows マシンを使用していることも前提としています。Mac/Unix/Linux ユーザーには C: ドライブがなく/site/html、自分のローカル ファイル システムのルートにディレクトリ ツリーが存在します。

$_SERVER['DOCUMENT_ROOT']fopen()、file_get_contents() など、サーバー内のローカル ファイル操作に使用されますが、クライアント側の操作には基本的にまったく役に立ちません。

于 2012-04-05T14:47:46.630 に答える