我有一个配置文件。这不是一个独立的文件。我将使用require()将此文件包含在我要使用的页面的顶部。我想动态获取此配置文件的完整绝对URL路径,无论其位置如何,并将其作为常量存储在其自身内。例如:
物理位置:(root dir)/my_folder/configuration.php
需要网址为: www.mydomain.com/my_folder/configuration.php
物理位置:(root dir)/demos/my_folder/configuration.php
需要网址为: www.mydomain.com/demos/my_folder/configuration.php
物理位置:(root目录)/demos/site1/my_folder/configuration.php
需要网址为: www.mydomain.com/demos/site1/my_folder/configuration.php
物理位置:(root目录)/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
我如何实现上述目标?
答案 0 :(得分: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),特别是Apache不允许您使用RewriteRule
设置值并且没有将其设置为使用mod_vhost_alias时的合理值。讨论持续了7到8年,因为大概来自Apache项目的人们拒绝改变行为,直到他们最终出现并在今年2.4.1中做出改变。 (我之前看过这个,但我现在忘记了确切的变化,以及它们的满足程度。)
如果您查看故障单上的评论,您会看到有人拒绝对行为进行更改,其评论如下:
不要信任DOCUMENT_ROOT变量。
DOCUMENT_ROOT不是,从来没有,也永远不会是找到网络内容的文件系统路径的可靠方法。
所以我建议阅读那张票的评论,看看有人在说使用它的注意事项。我已经使用它取得了很大的成功,并且不知道在DOCUMENT_ROOT
可用的相同情况下实现相同事情的更好方法并提供必要的数据。
答案 1 :(得分:2)
我使用的,完全符合我的要求,是:
define('URL', dirname(substr($_SERVER['SCRIPT_FILENAME'], strlen( $_SERVER[ 'DOCUMENT_ROOT' ] ) )).'/');