2013-07-30 104 views
0

我有以下目錄結構的網站:PHP require_once路徑

index.php 
connections/database.php 
contacts/details.php 
inc/functions.php 

的index.php文件,爲database.php和details.php頁面都需要的functions.php頁面。我在這些頁面中包含如下內容:

$path = dirname(__DIR__); 
// looks like this: /Library/WebServer/Documents/clients/acme 
require_once $path.'/inc/functions.php'; 

這在我的Mac開發服務器上運行良好。我只是將文件上傳到運行IIS/Windows 2008的生產服務器,所以我知道會有一些路徑問題。

我不得不改變代碼,包括functions.php文件到這一點:

$path = dirname(__DIR__); 
// looks like this: C:\inetpub\wwwroot\client_sites\acme 
require_once $path.'\inc\functions.php'; 

這是所有工作,到目前爲止,但我不知道是否有一個簡單的辦法,使動態的,所以我根據服務器環境,不必修改正確反斜槓或正斜槓的字符串?我會在某個時候忘記,或者客戶端可能會更換服務器,然後這會中斷,並且需要手動更改路徑。

有沒有辦法自動處理路徑,而不考慮服務器操作系統環境?

+5

你可以只使用/在整個,它將被正確解釋在Windows機器 – Orangepill

+1

同意@Orangepill - 正斜槓應適用於Windows和* nix系統。 – Cyclonecode

+1

PHP會爲你自動翻譯目錄分隔符。只需使用'/',不用擔心。唯一不用擔心的是指的是不同的驅動器。 Windows需要'D:/','C:/'等等,而unix-ish系統並不關心那種事情。 –

回答

2

那麼,PHP中有DIRECTORY_SEPARATOR常量,但沒有必要使用它。如果你使用正斜槓,在任何情況下你都會好的。 Windows不會介意。

1

在您的應用程序引導或自動載入中定義DIRECTORY_SEPARATOR。

例如

<?php 
define('DS', DIRECTORY_SEPARATOR); // set the 3rd param to true to define case-insensitive 

一些PHP框架(如CodeIgniter)以同樣的方式來確保正確的dirpaths。

因此,要在你的榜樣重新創建路徑:

<?php 
define('DS', DIRECTORY_SEPARATOR); 

require_once dirname(__DIR__).DS.'inc'.DS.'functions.php'; 

檢查出PredefinedConstantsdefine() PHP手冊。

也考慮使用set_include_path()spl_autoload_register()

快樂編碼!