2010-12-02 174 views
0

什么PHP包括文件

$_SERVER['DOCUMENT_ROOT']; 

dirname(__FILE__); 

之间的区别我不知道有什么区别,因为当我用“echo”他们,他们正在返回相同的路径。我应该选择哪一种,为什么?

谢谢!

回答

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']更合适。

+0

感谢您解释它是不吉利的! – Woppi 2010-12-02 10:13:26

2

__FILE__总是指向当前文件的路径,并$_SERVER['DOCUMENT_ROOT']指向文档的根路径;-)

我更喜欢第一个,因为它是更多的语义。

如果您尝试比较不在您的文档根目录中的文件的值,那么您会得到不同的值。

0

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

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

这个用法完全取决于我的意见。

0

当您想从您的网站或Web应用程序中的任何位置引用您网站的根文件夹时,通常会使用$_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在我的网站或Web应用程序,而不必担心还包括base.phpshot.phpplayer.php在同一时间。