PHP动态获取将包含在其他文件中的特定文件的完整绝对URL路径

时间:2012-08-04 03:40:48

标签: php url absolute-path

我有一个配置文件。这不是一个独立的文件。我将使用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

我如何实现上述目标?

2 个答案:

答案 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,因为它通常是唯一可用于构造某些自引用路径的动态变量。有一个关于如何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' ] ) )).'/');