文档根目录未显示


Document root not displaying

我有一个脚本,它使用它到所有其他包含文件的绝对路径;脚本将作为cron作业执行。当我在终端中运行脚本时,$_SERVER["DOCUMENT_ROOT"]返回一个null值,但在浏览器中它返回正确的文档根。

是什么原因导致了这个问题?

您的问题是$_SERVER变量是由执行环境提供的。当您在命令行上运行脚本时,没有HTTP服务器。

所以,你不能使用像DOCUMENT_ROOT这样的东西——如果没有Apache配置设置它,那会是什么?

相反,您可以使用__FILE__这样的变量,它是脚本的完整路径。也许一次或多次的dirname会让你到达DOCUMENT_ROOT

我希望只有当脚本实际在Web服务器中运行时才能定义$_SERVER,而不是当它由独立的命令行PHP解释器运行时。该值只有在服务器上下文中才有意义。如果脚本是作为cron作业运行的,那么它不应该依赖于该变量。

当php在CLI模式下执行时,它的行为会有所不同,包括不设置$_SERVER['DOCUMENT_ROOT']。要获得命令行中可用的$_SERVER值和其他工具的良好列表,请尝试执行<?php echo phpinfo();

作为CLI脚本,您应该仍然可以访问__FILE__,以了解您正在运行的文件是什么。

如果您正在使用Magento,则不要使用

$_SERVER["DOCUMENT_ROOT"]

realpath(dirname(__FILE__))

我建议你使用

目录名(Mage::getRoot())

这将给你的Magento存储的根文件夹,希望这有帮助。

干杯S

我需要在不同的服务器环境中执行相同的脚本,并且遇到了查找站点的公共根的问题,尤其是使用命令行php。我厌倦了编辑路径,所以我写了一个函数,可以在我的所有服务器环境中找到根。我相信还有更好的方法,但对我来说效果很好。它工作的目录结构的一些例子:

'/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;
}