目录(__FILE__) VS 将全局变量设置为目录


dirname(__FILE__) VS setting global variable to directories

使用它的优缺点是什么:

$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');

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

全局变量很糟糕。

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

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

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

通常,超全局$_SERVER是您需要的,尤其是$_SERVER['DOCUMENT_ROOT']。文档在这里。

但是如果你的应用程序完全存在于DOCUMENT_ROOT的单独子树中,你可以改变include_path,例如,像这样(但你可能想使用一些父目录或__DIR__子目录):

ini_set('include_path', __DIR__);

如果您也想保留默认include_path,它将变为:

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

一旦你设置了你的include_path,你的例子就变得简单了

require_once('test.php');

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