2012-04-03 95 views
1

全部。PHP:絕對路徑包含本地主機

我的問題是關於我遇到的問題,當試圖爲我的DOCTYPE節添加一個通用的PHP模板。我的DOCTYPE包含(正確地命名爲doctype.php)位於/ template目錄中,還包括指向我想讓所有頁面可訪問的CSS和JS文件的調用。

因此,當我嘗試寫入這些文件(CSS和JS文件)的絕對路徑時遇到問題。目前,我想:

<script type="text/javascript" src="<?php echo $_SERVER['DOCUMENT_ROOT'] . '/file/extension/to/javascript/file.js'; ?>"></script> 

<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['DOCUMENT_ROOT'] . 'file/extension/to/css/file.css'; ?>" 

我正在通過WAMP在我的本地應用程序。 看一看源代碼,看起來好像鏈接指向相應的文件(c:/wamp/www/examplesite/path/to/file/file.ext),並且一切都會好的。但它不是...

JavaScript不可訪問,樣式表不能正常工作。我不知道該怎麼做。

我也試過: - 寫入不使用PHP的絕對路徑 - 創建PHP變量來保存文檔根,然後連接相應的目錄路徑以訪問文件。

有什麼建議嗎?當我將目錄結構上傳到我的在線服務器與我當前的本地主機時,這將如何改變?

+0

目錄訪問問題似乎。如果我錯了,有人回答,請給我加標籤。:P – hjpotter92 2012-04-03 22:41:17

+0

看看網絡面板(在chrome中:ctrl + shift + i,點擊網絡標籤,刷新你的網頁)。獲取javascript的HTTP請求返回錯誤404或其他內容?如果它是404,那麼js的路徑是不正確的,但它可能是與訪問文件的權限有關的問題。此外,您可以看到瀏覽器用來請求js的路徑。 – 2012-04-03 23:00:59

回答

2

當然,任何類型的資源(JS,CSS,圖像等)都必須通過http請求來訪問,因此不可能用絕對路徑直接訪問它們。考慮這種方法的安全影響。所以你總是必須使用相對於你的web根目錄的web路徑。

例如:

<script type="text/javascript" src="http://localhost/myproject/media/ja/file.js"></script> 
3

你可能想嘗試$ _ SERVER [ 'HTTP_REFERER']來代替。它給你你正在尋找的路徑。

在我的使用WAMP的本地機器上,我使用了<?php print_r($_SERVER); ?>來查看它給出的值。

此外,片段中可能存在一些拼寫錯誤。例如,你不需要你給出的第一個例子中的前導/。

例如:

<script type="text/javascript" src="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/javascript/file.js'; ?>"></script> 
<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/css/file.css'; ?>"></link> 

或者因爲HTTP_REFERER無法在某些情況下被信任,你可能希望創建構建絕對路徑的底座部分的功能。

<?php 
function getAddress() { 
    $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; 
    $filenamepattern = '/'.basename(__FILE__).'/'; 
    return $protocol.'://'.$_SERVER['HTTP_HOST'].preg_replace($filenamepattern,"",$_SERVER['REQUEST_URI']); 
} 
?> 

然後調用它像這樣:

<script type="text/javascript" src="<?php echo getAddress() . 'file/extension/to/javascript/file.js'; ?>"></script> 
<link rel="stylesheet" type="text/css" href="<?php echo getAddress() . 'file/extension/to/css/file.css'; ?>"></link> 
1

您正在使用的文件路徑指向文件在本地機器上(例如:C:\一些\路徑\爲\文件),當您應該使用URL(例如:http://localhost/some/path/to/file)。 HTML被客戶端瀏覽器解析,所以當它試圖訪問不是URL的路徑時,

而不是使用$ _ SERVER的[「DOCUMENT_ROOT」]您可以使用絕對路徑,如

<script type="text/javascript" src="/path/to/my/file.js"></script> 

其中「/路徑」文件夾是你的基地web目錄,或者您也可以使用基於相對URL無論文件所在的目錄是doctype.php文件。我建議不要做後者,因爲這是一個難以跟蹤的痛苦。

如果使用相對URL,將代碼移動到新主機時應該沒有問題,前提是目錄結構保持不變。

+0

同樣練習使用'dirname(__ FILE __)'作爲相對路徑。 – Panagiotis 2012-04-03 23:15:04

+1

@Panagiotis你應該提到,只有假設資產存儲在可訪問的文件系統樹的同一級別或更遠處才能正常工作。就像一個前端控制器模式。 – Xeoncross 2012-04-03 23:20:40

+0

對! +1提到它! – Panagiotis 2012-04-03 23:22:04

0

你會了解,包括在你的頁面文件中的錯誤的方式,你應該使用的HTTP URL來代替:

<script type="text/javascript" src="/file/extension/to/javascript/file.js"></script> 

或者,如果你喜歡使用一個變量與主機名:

<script type="text/javascript" src="http://<?php echo $_SERVER['HTTP_HOST']; ?>/file/extension/to/javascript/file.js"></script>