2008-12-05 103 views
22

在我的PHP網站和各種嵌套目錄的各個頁面上,我想在相對於根目錄的路徑中包含特定文件。如何格式化PHP include()絕對路徑(而不是相對路徑)?

我可以把什麼單個命令在這些頁面上...

http://www.example.com/pageone.php
http://www.example.com/somedirectory/pagetwo.php

...包括此頁:

http://www.example.com/includes/analytics.php

這不起作用:

<?php include('/includes/analytics.php'); ?> 

這有關係嗎? IS在Windows上?

回答

5

如果你給包括()或require()(或* _once版本)的絕對路徑,該文件將被包括在內。絕對路徑名在UNIX上以「/」開頭,在Windows上以驅動器號和冒號開頭。

如果給出一個相對路徑(任何其他路徑),PHP將按順序搜索配置值「include_path」中的目錄,直到找到匹配或沒有更多目錄可供搜索。

所以,簡而言之,要包含一個絕對文件名,給一個絕對文件名。另請參閱功能realpath()

如果你想設置自己有「根」,看看this question(特別是我的回答當然:-)

1

使用..上去一個目錄。因此,在pageone.php

include 'includes/analytics.php'; 

在pagetwo.php

include '../includes/analytics.php'; 

有沒有「根」,只要您PHP指爲據我所知,儘管你可以,如果把它定義概念你自找的。祝你好運!

+1

有沒有辦法使用絕對路徑? – 2008-12-05 19:19:11

+1

您可以使用絕對路徑,如「c:/includes/analytics.php」或「/home/iamnafets/includes/analytics.php」,但PHP文件不是「項目」或「虛擬目錄」的一部分ASP頁面。 – 2008-12-05 19:21:27

+0

我還不夠具體。我想要一個可以在任一頁面上工作的命令。 – 2008-12-05 19:21:28

8

正如@Stefan Mai所言,PHP沒有「根」路徑,但您可以很容易地定義一個路徑 - 大多數站點都有一個每次都包含的頁面(例如配置文件),您可以添加:

define('ROOT', dirname(__FILE__)); 

然後使用include ROOT。 '/includes/analytics.php';

一些也很有用的東西是auto_prepend指令,你可以在.htaccess中使用apache - 不確定是否在IIS上設置它(儘管你可以在PHP ini中有一個全局指令)。

+0

COURSE php有一個根。這是文件系統的根! – gnud 2008-12-05 19:26:30

24

你可以使用include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php";

0

代字號被解釋爲通過外殼特殊字符,所以使用它裏面無論操作系統如何,PHP代碼都無法工作。

如果您嘗試訪問與用戶主目錄相關的內容,您可以嘗試getenv() - 我非常確定Windows設置了一個相當於$HOME的環境變量。

1

This works。

<?php include('c:/inetpub/example.com/includes/analytics.php'); ?> 

我不得不做出c:/inetpub/example.com/部分某種全局變量,因此它是從服務器到服務器有所便攜。

9

從PHP的角度來看,root是Web服務器上文件系統的頂層,而不是Web瀏覽器角度的根。

大多數人會做以下其中之一。

在全局配置文件中定義一個常量,並在每次調用require/include時使用該常量。

或者他們使用這樣的代碼。

require_once realpath(dirname(__FILE__).'/config.php'); 
require_once realpath(dirname(__FILE__).'/lib/Database.php'); 

使用環境變量在某些情況下可能是危險的,並且是安全問題的根源。

4

我綜合了上述建議並提出了這個建議。

在我config.php文件中,我定義ROOT爲:

define('ROOT', $_SERVER['DOCUMENT_ROOT']);

然後我用它在我的強校文件:

include_once(ROOT."/someFile.php");

include_once(ROOT."/includes/someFile.php");

0

我發現的方法是:

<?php include $_SERVER['DOCUMENT_ROOT'].'\\Your\\Site\\Path.php' ?> 

當你有一些可以逃脫的特殊字符時,\\是必需的。 \ n),這樣\\就是字符串上的\。

因爲你在窗口中,你必須使用\而不是/