dirname(__ FILE__)VS将全局变量设置为目录

时间:2012-06-09 22:30:35

标签: php

使用它的优点和缺点是什么:

$globals['server_url'] = dirname(__FILE__);
$globals['mainfiles'] = dirname(__FILE__).'/main';

以及使用它的利弊:

$globals['server_url'] = '/srv/www/htdocs/somwhere/';
$globals['mainfiles'] = '/srv/www/htdocs/somwhere/main';

你有什么建议。

顺便说一句:这些是在config.php文件中设置的,也是由其他文件调用的,当包含我们使用它的文件时停止目录冲突:

require_once($globals['server_url'].'/test.php');

3 个答案:

答案 0 :(得分:9)

dirname(__FILE__) or __DIR__优于'/srv/www/htdocs/somwhere/',因为它们将在您移动或重命名文件夹的那一天继续工作,或者您迁移到其他服务器或其他操作系统。 便携性和灵活性是这里的主要内容。

全局变量很糟糕。

答案 1 :(得分:0)

__FILE__方法工作正常,但您需要知道文件的位置。如果将文件移动到另一个目录,该值将会更改,并可能会破坏依赖于该文件的任何内容。

另一方面,对路径进行硬编码也可以正常工作,但如果您将文件移动到其他目录,则需要确保它是有效的。

正确的解决方案是个人偏好。我可能会使用__FILE__方法(特别是如果这是您将分发给其他服务器/用户的代码)。

答案 2 :(得分:0)

通常情况下,您需要$_SERVER超全局,特别是$_SERVER['DOCUMENT_ROOT']。文档here

但是,如果您的应用程序完全位于DOCUMENT_ROOT的单独子树中,则可以更改include_path,例如,像这样(但您可能希望使用某些父目录或__DIR__的子目录。 1}}):

ini_set('include_path', __DIR__);

如果你想保留默认的include_path,它就变成了这个:

ini_set('include_path', ini_get('include_path').';'.__DIR__);

设置include_path后,您的示例就变为

require_once('test.php');

当然,在您的应用程序中使用硬编码绝对路径会使其完全或部分地移动到同一服务器或另一台服务器上变得困难且容易出错。