3

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

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

3 回答 3

9

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

全局变量很糟糕。

于 2012-06-09T22:34:30.350 回答
0

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

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

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

于 2012-06-09T22:34:58.727 回答
0

通常,$_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');

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

于 2012-06-09T23:04:22.707 回答