我有一个配置文件。这不是一个独立的文件。我将使用 require() 将此文件包含在我要使用的页面的顶部。我想动态获取此配置文件的完整绝对 url 路径,而不管它的位置并将其作为常量存储在自身中。例如:
物理位置:(根目录)/my_folder/configuration.php
需要 URL 为: www.mydomain.com/my_folder/configuration.php
物理位置:(根目录)/demos/my_folder/configuration.php
需要 URL 为: www.mydomain.com/demos/my_folder/configuration.php
物理位置:(根目录)/demos/site1/my_folder/configuration.php
需要 URL 为: www.mydomain.com/demos/site1/my_folder/configuration.php
物理位置:(根目录)/demos/site2/my_folder/configuration.php
需要 URL 为: 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
如何实现上述目标?
最佳答案
如果你可以依赖于 $_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 不允许您使用 RewriteRule
设置值并且没有'使用 mod_vhost_alias 时不要将其设置为合理的值。讨论持续了 7-8 年,因为据推测来自 Apache 项目的人们拒绝改变行为,直到他们终于在今年 2.4.1 中做出改变。 (我之前调查过这个,但我现在忘记了确切的变化是什么,以及它们有多令人满意。)
如果您查看工单上的评论,您会看到人们通过以下评论抵制改变行为:
Don't trust the DOCUMENT_ROOT variable.
DOCUMENT_ROOT is not, never was, and never will be a reliable way of finding the filesystem path to web content.
所以我建议阅读该票证上的评论,看看人们在说什么使用它的注意事项。我已经使用它取得了很大的成功,并且不知道有什么更好的方法可以在 DOCUMENT_ROOT
可用并提供必要数据的相同情况下实现相同的目的。
关于PHP动态获取将包含在其他文件中的特定文件的完整绝对URL路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805731/