2011-08-10 62 views
0

網絡的意圖PHP代碼我有PHP代碼,按地址$_SERVER['DOCUMENT_ROOT'].'/subdir/file.php';從命令行運行

首先,requires其他PHP文件 - 這是包括物盡其正確的方法?很明顯,我不想使用像'../../subdir/file.php';這樣的路徑,因爲移動文件會破壞它。

但另一個有趣的問題是,如果我通過命令行運行此文件,則不會創建$_SERVER。我可以通過$_SERVER['DOCUMENT_ROOT'] = '.';來僞造,但我很好奇,如果這是最佳做法。似乎不是。

編輯:很明顯,有很多方法來剝皮這隻貓,但我認爲最好的做法是定義一個負責include目錄的變量(或常量)。如:

define('INC_DIR', $_SERVER['DOCUMENT_ROOT'].'/../includes'); 

if (PHP_SAPI == 'cli') { 
    $_includes = '../includes'; 
} else { 
    $_includes = $_SERVER['DOCUMENT_ROOT'].'/../includes/'); 
} 

並使用整個代碼前述變量或常數。

回答

2

我更喜歡在我的架構中使用文件夾定義系統。類似這樣的:

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

在命令行和Web模式下都可以使用。在你的應用程序入口點(大多數情況下使用index.php)使用它,然後從該文件中向外加載框架的其餘部分。您的應用程序的所有接聽電話應通過的.htaccess或其他方法進行路由,讓他們打電話的index.php富=酒吧等

我也很討厭打字DIRECTORY_SEPARATOR所有的時間,所以我通常做的第一個定義:

define('DS' , DIRECTORY_SEPARATOR); 

這使你以後做這樣的事情:

require_once(DIR_ROOT.DS.'myfolder'.DS.'myfile.class.php'); 
0

另外,如果你不想或者需要修改你的php文件,並且你只需要一個正常執行的頁面,你可以使用curl。大多數Linux和Unix系統都安裝了它。

$ curl http://www.example.com/myscript.php &> /dev/null 

&> /dev/null部分輸出發送到系統中的一個黑洞,所以你不必看這是由請求返回的HTML。

0
if(PHP_SAPI == 'cli') 
{ 
    $_SERVER['DOCUMENT_ROOT'] = '/path/to/webroot'; 
}