我有一個腳本,使用其所有其他包含文件的絕對路徑;該腳本將作爲cron作業執行。當我在終端中運行腳本時,$_SERVER["DOCUMENT_ROOT"]
返回空值,但在瀏覽器中它返回正確的文檔根目錄。文檔根目錄不顯示
什麼會導致此問題?
我有一個腳本,使用其所有其他包含文件的絕對路徑;該腳本將作爲cron作業執行。當我在終端中運行腳本時,$_SERVER["DOCUMENT_ROOT"]
返回空值,但在瀏覽器中它返回正確的文檔根目錄。文檔根目錄不顯示
什麼會導致此問題?
我只希望$_SERVER
只在腳本實際在網絡服務器上運行時才能定義,而不是由獨立的命令行PHP解釋器運行。該值在服務器上下文中才有意義。如果腳本是作爲cron作業運行的,它不應該依賴該變量。
謝謝,我明白了。 :) – TED
你的問題是$_SERVER
變量是由執行環境提供的。在命令行上運行腳本時,不存在HTTP服務器。
所以,你不能使用像DOCUMENT_ROOT
這樣的東西 - 當沒有Apache配置的時候會是什麼?
相反,您可以使用像__FILE__
這樣的變量,它是腳本的完整路徑。也許dirname
那一次或多次會讓你到DOCUMENT_ROOT
。
謝謝,我明白了。 :) – TED
當在CLI模式下執行php時,其行爲會有所不同,包括未設置$_SERVER['DOCUMENT_ROOT']
。對於$_SERVER
值和可在命令行中其他工具的一個很好的列表,請嘗試執行<?php echo phpinfo();
爲CLI腳本,你還是應該有機會獲得__FILE__
找出您正在運行的文件。
謝謝,我明白了。 :) – TED
我需要在不同的服務器環境中執行相同的腳本,並且遇到了查找站點的公共根目錄的問題,尤其是使用命令行php。我厭倦了編輯路徑,所以我編寫了一個可以在我的所有服務器環境中找到root的函數。我相信有更好的方法,但對我很好。 一些它的工作原理是什麼目錄結構例子:
'/var/www/magento/some/folder/'
'/home/user/html/some/folder/'
'/home/user/public_html/some/folder/'
function getSiteRoot() {
/*
' Returns the root of any of your development/live site as long as the $home array
' contains a unique folder name. Define your public directories in this array and the
' building function will break when it hits this directory.
*/
$a = realpath(dirname(__FILE__).'');
$b = explode('/', $a);
$home = array("html","public_html","magento"); //add your public folders here
$str = '';
foreach ($b as $c) {
$str.= $c . DIRECTORY_SEPARATOR . '';
if(in_array($c, $home)) {
break;
}
}
return $str;
}
如果您正在使用的Magento然後,而不是使用
$ _ SERVER [ 「DOCUMENT_ROOT」]
或
realpath(dirname(__FILE__))
我會建議你使用
目錄名(法師:: getRoot())
這會給你你的Magento商店的根文件夾,希望這有助於。
乾杯 S
這不是錯誤。這是預期的行爲。 CLI的行爲與其他SAPI不同。您可以在[PHP主題上的手冊文檔](http://www.php.net/manual/en/features.commandline.differences)中獲得一個很好的概要。PHP) – rdlowrey