我正在使用$_SERVER['DOCUMENT_ROOT']
作为我的包含路径,因此文件将确定它们的运行位置(即它们是在实时还是暂存)并且它工作正常,除了由cron运行的脚本我必须对路径进行硬编码。
我可以使用另一个可以在cron和浏览器中使用的变量吗?
答案 0 :(得分:12)
通过cron运行PHP脚本时,我认为它是在CLI的上下文而不是Web服务器上执行的。在从CLI执行PHP的情况下,$ _SERVER ['DOCUMENT_ROOT']未正确填充。您可以使用以下代码解决此问题:
if ($_SERVER['DOCUMENT_ROOT'] == "")
$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
答案 1 :(得分:5)
以下内容将为您提供脚本所在的目录:
realpath(dirname(__FILE__));
这适用于Web请求和cron脚本。
答案 2 :(得分:3)
最好的办法是定义自己的常量,您可以从应用中的任何其他位置引用该常量。例如,您可以在MyAppDirectory / public_html / index.php中输入类似的内容:
define('APPLICATION_PATH', realpath(dirname(__FILE__).'/..'));
这将为您提供一致的MyAppDirectory /的引用,无论index.php在哪里被调用或包含。定义自己的常量不仅允许您从cron或通过浏览器调用您的应用程序,而且还允许您以更小的方式更改存储结构,只需最少的更改即可跟踪。 Zend Framework在Zend_Application引导过程中大量使用它,并且用于“php APPLICATION_PATH”的Google搜索将为您提供各种进一步的参考。
答案 3 :(得分:0)
如果您的脚本通过cron运行,则可以使用chdir()
函数:
chdir(dirname(__FILE__)); //avoid conflict with "cron path" and app base path (if script runs via 'Cron')
我在Windows上工作,所以使用“nnCron”,但它也必须在Linux上工作。