PHP包括文件

时间:2010-12-02 09:54:59

标签: php

之间有什么区别
$_SERVER['DOCUMENT_ROOT'];

dirname(__FILE__);

我想知道有什么区别,因为当我'回应'它们时,它们会返回相同的路径。我更喜欢哪种?为什么?

谢谢!

4 个答案:

答案 0 :(得分:3)

两者都不同

<强> _ FILE _

  

文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。自PHP 4.0.2起, FILE 总是包含已解析符号链接的绝对路径,而在旧版本中,它在某些情况下包含相对路径。

来源:PHP magic constants

我们说,你的文件是/var/www
并且您的索引页面为/var/www/index.php

dirname(__FILE__) == $_SERVER['DOCUMENT_ROOT'];

但是,如果您深入到/var/www/posts/index.php

这样的子文件夹
dirname(__FILE__) != $_SERVER['DOCUMENT_ROOT'];
/var/www/posts    != /var/www

在这种情况下,使用$_SERVER['DOCUMENT_ROOT']更合适。

答案 1 :(得分:2)

__FILE__始终指向当前文件路径,$_SERVER['DOCUMENT_ROOT']指向文档根路径; - )

我更喜欢第一个,因为它更具语义性。

如果您尝试比较不在docroot中的文件值,那么您将获得不同的值。

答案 2 :(得分:0)

前一个是HTTP服务器(或VirtualHost)的根文件夹,它是一个服务器设置。

后者是包含当前文件的文件夹。

用法完全基于我认为的要求。

答案 3 :(得分:0)

如果您想从网站或网络应用程序中的任何位置引用您网站的根文件夹,通常会使用$_SERVER['DOCUMENT_ROOT']

如果您包含一个文件,您会发现使用dirname(__FILE__)方便,然后需要在同一目录中包含更多文件。我在PHP wrapper for the Dribbble API

中使用此功能
class Dribbble {

    function __construct() {
        require_once(dirname(__FILE__) . '/base.php');
        require_once(dirname(__FILE__) . '/shot.php');
        require_once(dirname(__FILE__) . '/player.php');
    }
}

这意味着我可以在我的网站或网络应用中的任何位置添加dribbble.php,而不必担心同时包括base.phpshot.phpplayer.php时间。