4

我有一个配置文件。这不是一个独立的文件。我将使用 require() 将这个文件包含在我想要使用的页面的顶部。我想动态获取此配置文件的完整绝对 url 路径,无论它的位置如何,并将其作为常量存储在其自身中。例如:

物理位置:(根目录)/my_folder/configuration.php

需要网址为: www.mydomain.com/my_folder/configuration.php

物理位置:(根目录)/demos/my_folder/configuration.php

需要网址为: www.mydomain.com/demos/my_folder/configuration.php

物理位置:(根目录)/demos/site1/my_folder/configuration.php

需要网址为: www.mydomain.com/demos/site1/my_folder/configuration.php

物理位置:(根目录)/demos/site2/my_folder/configuration.php

需要网址为: www.mydomain.com/demos/site2/my_folder/configuration.php

到目前为止简单吗?这是真正需要的并使其变得复杂(IMO)。考虑一下:

配置文件位于: www.mydomain.com/demos/site2/my_folder/configuration.php

有嵌套文件夹: www.mydomain.com/demos/site2/1/2/3/index.php

当我按照上面的 URL 访问“3”子文件夹中的 index.php 文件时,我需要配置文件的路径为 www.mydomain.com/demos/site2/my_folder/configuration.php而不是 www。 mydomain.com/demos/site2/1/2/3/my_folder/configuration.php

我怎样才能实现上述目标?

4

2 回答 2

5

如果你可以依赖 的值$_SERVER[ 'DOCUMENT_ROOT' ],那么在里面configuration.php

$path = substr( __FILE__, strlen( $_SERVER[ 'DOCUMENT_ROOT' ] ) );

$url = "www.mydomain.com{$path}";

$_SERVER[ 'HTTP_HOST' ]如果它适合您的用例,您可以使用;使其更具动态性

DOCUMENT_ROOT

DOCUMENT_ROOT在开发中大量使用了它,因为它通常是唯一可用于构建某些自引用路径的动态变量。有一个长期运行的 Apache 错误票 ( #26052 ) 关于如何DOCUMENT_ROOT处理不当,特别是 Apache 不允许您设置值,RewriteRule并且在使用 mod_vhost_alias 时没有将其设置为合理的值。讨论持续了 7 到 8 年,大概来自 Apache 项目的人们抵制改变行为,直到他们终于在今年 2.4.1 中出现并做出改变。(我之前研究过这个,但我现在忘记了确切的变化是什么,以及它们有多令人满意。)

如果您查看票证上的评论,您会看到人们抵制改变行为的评论,例如:

不要相信 DOCUMENT_ROOT 变量。

DOCUMENT_ROOT 不是,从来不是,也永远不会是找到 Web 内容的文件系统路径的可靠方法。

所以我建议阅读那张票上的评论,看看人们在说什么使用它的注意事项。我已经使用它取得了很大的成功,但不知道有更好的方法在相同的情况下实现相同的事情DOCUMENT_ROOT并提供必要的数据。

于 2012-08-04T04:04:31.330 回答
2

我使用的,非常适合我想要的,是这样的:

define('URL', dirname(substr($_SERVER['SCRIPT_FILENAME'], strlen( $_SERVER[ 'DOCUMENT_ROOT' ] ) )).'/');
于 2013-07-17T11:17:00.587 回答