2012-04-05 137 views
0

我使用$ _SERVER [DOCUMENT_ROOT]很多來確保我的所有鏈接都能正常工作。例如:

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

不要緊,那是在文件的實際路徑,它總能找到相對於文檔根目錄的圖標的正確位置。

這一切在我的網絡服務器上按預期工作。但是,在我的本地開發服務器(Windows 7,Apache 2.2,虛擬主機配置)上,當它指向正確的路徑(C:/ Local/MySite)時,實際上並沒有發生任何事情(favicon不起作用,樣式表和圖像不'噸得到加載等)

有沒有什麼辦法讓$ _SERVER [DOCUMENT_ROOT]在本地工作?

我發現使用「http://」和$ _SERVER [HTTP_HOST](<link href="http://' . $_SERVER[HTTP_HOST] . '/favicon.ico" rel="icon" />)可以得到相同的預期結果,這樣做有什麼缺點嗎?或者,我可以繼續使用$ _SERVER [DOCUMENT_ROOT],只需使用服務器重寫規則將其解析爲可在本地運行的某些內容,並且不會影響瀏覽器。

回答

3

$_SERVER[DOCUMENT_ROOT]是網站根目錄的整個路徑,並且會出現鏈接和圖像的壯觀失敗。

現在,說了這麼多,你到目前爲止確定的是...只有當$_SERVER[HTTP_HOST]只在使用HTTP/1.1進行連接並且客戶端發出主機頭時纔有效。儘管如此,$_SERVER[SERVER_NAME]應該始終有效。請注意,$_SERVER[SERVER_NAME]將使用虛擬主機的主地址,因此如果服務器有別名...

+0

你的意思是說,不應該使用$ _SERVER [DOCUMENT_ROOT],不管本地與否? – 2012-04-05 14:40:49

+0

是的,不要在鏈接/圖像中使用$ _SERVER [DOCUMENT_ROOT]。不過,它確實有其用處,例如當您使用PHP複製/移動文件時。 – Powerlord 2012-04-05 14:43:08

+2

$ _SERVER [「DOCUMENT_ROOT」]應該只用於腳本的內部(需要,包括...),但不應該**用於外部(html,圖像...) – StormByte 2012-04-05 14:56:21

1

文檔根目錄是您的服務器上的本地路徑,並且在瀏覽器看到的任何地方都沒有任何意義您的網站。

如果你的HTML有

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

你是告訴用戶的瀏覽器,試圖從用戶自己的本地驅動器加載該圖標。這不但不會起作用,還會假定用戶在Windows機器上。 Mac/Unix/Linux用戶將不會有C:驅動器,請在自己的本地文件系統的根目錄中放置一個/site/html目錄樹。

$_SERVER['DOCUMENT_ROOT']用於服務器內本地文件操作,例如, fopen(),file_get_contents()等等......但對於客戶端操作來說基本上是毫無用處的。