2011-11-13 103 views
1

這是我使用的代碼(它的index.php文件)錯誤設置包括路徑

/* Set an include path 
*/ 
$dir = explode('/', __DIR__); 
$i = count($dir); 
unset($dir[$i-1], $dir[$i-2]); 
$path = implode('/', $dir); 
ini_set('include_path', $path); 

// require('system/base/file.php'); // ***1 

/* Starter file 
*/ 
if (file_exists('system/base/file.php')) { require('system/base/file.php'); } 
else { exit('Error'); } 

我正在開發具有這種結構

application/ 
    public/ 
     index.php 
system/ 

而且我想要一個框架,將包含路徑設置爲根/(包含應用程序/和系統/的文件夾)。 __DIR__給了我很多東西,如Application/xammp/htdocs/application/public/index.php(在localhost中);我不確定客戶__DIR__是如此不同,考慮到我對第一個路徑一無所知。我剛剛寫了那幾行,輕鬆刪除DIR中的最後2個文件夾,所以我確信無論__DIR__是什麼路徑都是正確的。我在另一個測試環境中測試了這些線,並且它們工作正常。

發生的奇怪的事情是,如果我運行的代碼,因爲它顯示在那裏它給了我「錯誤」。而如果我只是需要system/base/file.php之前檢查它的存在它的作品。所以如果我取消註釋(*** 1)該文件是必需的。

回答

2

您可以使用$ path = dirname(dirname(DIR)),這將實現與前5行代碼相同的功能。根據PHP文檔,include_path僅適用於:require(),include(),fopen(),file(),readfile()和file_get_contents(),而不是file_exists()。因此,您必須將$ path存儲在變量或常量中。例如:

/* Set an include path 
*/ 
$path = dirname(dirname(__DIR__)); 
ini_set('include_path', $path); 
define('PATH', $path) 

// require('system/base/file.php'); // ***1 

/* Starter file 
*/ 
if (file_exists(PATH . 'system/base/file.php')) { require('system/base/file.php'); } 
else { exit('Error'); } 
+0

我該如何處理這個問題?此時在設置ini包含路徑配置方面沒有意義。 – Shoe

+0

確實,使用ini包含路徑配置現在有點多餘。也許你應該只需要()你想要的文件,並使用set_error_handler定義一個錯誤處理程序來進行自定義錯誤管理。 –

+0

感謝dirname()的東西和建議。我完全忘了dirname()函數。 :) – Shoe