我爲我的包含路徑使用$_SERVER['DOCUMENT_ROOT']
,因此文件會找出它們的運行位置(即它們是否處於活動狀態或暫存狀態)並且工作正常,除了由cron運行的腳本,我必須硬編碼路徑。
是否有另一個變量,我可以使用,可以從cron和瀏覽器工作?
我爲我的包含路徑使用$_SERVER['DOCUMENT_ROOT']
,因此文件會找出它們的運行位置(即它們是否處於活動狀態或暫存狀態)並且工作正常,除了由cron運行的腳本,我必須硬編碼路徑。
是否有另一個變量,我可以使用,可以從cron和瀏覽器工作?
當通過cron運行你的PHP腳本時,我假設它是在CLI的上下文中而不是web服務器上執行的。在從CLI執行PHP的情況下,$ _SERVER ['DOCUMENT_ROOT']未正確填充。您可以使用下面的代碼來解決此問題:
if ($_SERVER['DOCUMENT_ROOT'] == "")
$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
下面將爲您,您的腳本所在的目錄:
realpath(dirname(__FILE__));
這同時適用於Web請求和cron腳本。
使用realpath幫助我在windows系統上工作時,謝謝。 – CrandellWS
要做的最好的事情是定義自己的常量,您可以從應用程序中的任何其他地方引用它。例如,你可以把這樣的事情在MyAppDirectory /的public_html/index.php文件:
define('APPLICATION_PATH', realpath(dirname(__FILE__).'/..'));
這會給你一個一致的參考回到MyAppDirectory /無論在哪裏的index.php被稱爲或包括在內。定義你自己的常量不僅可以讓你從cron或通過瀏覽器調用你的應用程序,而且還可以讓你以更大的方式改變你的存儲結構,只需要最少的修改就可以跟蹤。 Zend Framework在Zend_Application引導過程中大量使用它,並且使用「php APPLICATION_PATH」搜索將爲您提供各種其他引用。
可以使用chdir()
功能,如果您的腳本通過cron運行:
chdir(dirname(__FILE__)); //avoid conflict with "cron path" and app base path (if script runs via 'Cron')
我在Windows上運行,所以用「nnCron」但它也必須在Linux上工作。
如果從子文件夾運行的腳本將返回子文件夾。 –