2012-02-14 56 views
0

我使用了一個簡單的解決方案用於獲取服務器的根,它工作得很好用我包括:使用PHP標籤HREF內=「」定義

<?php $root = $_SERVER['DOCUMENT_ROOT'].'/frizkie'; ?> 

我正在做一些表格,以及包含該表的PHP文件嵌套不少目錄下來:

/main/tools/planners.php 

我的圖片位於:

/images/staticons/ 

我的代碼如下所示:

<td onClick="document.location.href='planners/agility.php';">Contents</a></td> 

我希望能夠使用$根目錄下的「策劃/ agility.php」的一部分,但這樣做是這樣的:

onClick="document.location.href='<?php echo $root; ?>/planners/agility.php';" 

導致onClick部分根本無法工作。除此之外,我還想使用$root變量使用相同的方法定義表格單元格背景。我已經嘗試在後臺=「」定義中使用PHP標記,但圖像不顯示在Chrome或Firefox中 - 僅顯示IE9。

+0

查看文件源是否顯示var? – 2012-02-14 04:35:18

+0

' 這是來自IE9的源代碼視圖。對我來說看起來很好,但我無法點擊單元格並點擊鏈接。 – taylorthurlow 2012-02-14 04:46:52

回答

1

$_SERVER['DOCUMENT_ROOT']可以說是服務器端路徑,正如您已經注意到的那樣。你不需要把它放在你的標記,CSS和JS中。我會堅持絕對相對路徑,如/images/background.jpg(注意引導斜線)。即使你的網頁是由URL像

http://example.com/blog/123-my-beautiful-post/

圖像訪問這樣從

http://example.com/images/background.jpg

,而不是

http://example.com/images/blog/123-my-beautiful-post/images/background.jpg下載。

使用DOCUMENT_ROOT可以幫助您在文檔根目錄中散佈多個文件時使用相對路徑,這讓我很頭疼。如果你真的想在你的網頁中找到完整的網址,那麼你可以嘗試使用$_SERVER['SERVER_NAME']來處理這個問題,但我真的不明白需要這樣做。

+0

我想我試圖讓它變得更加複雜而不是必要的,並且可能在過去做了一些錯誤,讓我覺得用反斜槓啓動路徑不會自動進入根目錄。我認爲我很困惑,因爲我的本地服務器文件heirarchy的結構與webserver(localhost vs domain.com)的根目錄有所不同。謝謝一堆! – taylorthurlow 2012-02-14 04:58:42

0

當您編寫HTML標記時,請勿在您的hrefs中使用服務器路徑。相反,hrefs應該是相對於您的網站域的基礎。

當您要通過require/require_once/include/include_once加載PHP文件時使用文檔根目錄。

另外,爲什麼你的代碼不工作的原因可能是因爲某些Web服務器安裝,下列三個條件之一的文檔根目錄中(在Apache的httpd.conf集):

  1. 它不是」 t來
  2. 有一個尾隨斜線
  3. 沒有尾隨斜線

所以,你必須檢查所有的三個條件,然後決定,也就是說,總有結尾的斜線。

如果未設置,則應該將$ docroot明確設置爲定義的常量,如define(「DOCROOT」,「/ user/home/jayleno /」),然後在整個代碼中使用該常量。

$docRoot = $_SERVER['DOCUMENT_ROOT']; 
if (strlen($docRoot) <= 0) { 
    // you are going to have to hard code it 
    $docRoot = "/usr/home/jayleno/"; 
} 
$lastChar = substr($docRoot, -1); 
if ($lastChar != '\\' || $lastChar != '/') 
    $docRoot .= "/"; 

$templateRoot = $docRoot . "templates/"; 
$moduleRoot = $docRoot . "modules/"; 
. 
. 
$rootCanal = $docRoot . "mytootheaches/";