Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP动态获取将包含在其他文件中的特定文件的完整绝对URL路径_Php_Url_Absolute Path - Fatal编程技术网

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

PHP动态获取将包含在其他文件中的特定文件的完整绝对URL路径,php,url,absolute-path,Php,Url,Absolute Path,我有一个配置文件。这不是一个独立的文件。我将使用require()将此文件包含在要在中使用的页面顶部。我希望动态地获取此配置文件的完整绝对url路径,而不管它位于何处,并将其作为常量存储在自身中。例如: 物理位置:(根目录)/myu文件夹/configuration.php 需要URL:www.mydomain.com/my_folder/configuration.php 物理位置:(根目录)/demos/my_folder/configuration.php 需要URL:www.mydoma

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

物理位置:(根目录)/myu文件夹/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


如何实现上述功能?

如果您可以依赖
$\u SERVER['DOCUMENT\u ROOT']
的值,那么在
配置中。php

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

$url = "www.mydomain.com{$path}";
如果它适合您的用例,您可以使用
$\u SERVER['HTTP\u HOST']
使其更具动态性

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

如果你看罚单上的评论,你会看到人们抵制改变行为,评论如下:

不要信任DOCUMENT\u根变量

DOCUMENT_ROOT现在、过去和将来都不是查找web内容文件系统路径的可靠方法


因此,我建议阅读该罚单上的评论,看看人们在说什么,使用它的注意事项是什么。我已经成功地使用了它,不知道有什么更好的方法可以在同样的情况下实现同样的目标,因为
DOCUMENT\u ROOT
是可用的,并且提供了必要的数据。

我使用的方法非常适合我想要的,是:

define('URL', dirname(substr($_SERVER['SCRIPT_FILENAME'], strlen( $_SERVER[ 'DOCUMENT_ROOT' ] ) )).'/');

天哪!你到底是怎么这么容易做到的?我为此挣扎了很长时间。答案已接受:)仅用于了解目的:依赖$\u服务器['DOCUMENT\u ROOT']是否不安全?会发生什么?我只是从经验中知道了一些可以帮助我的东西(比如
\uuuu FILE\uuuu
DOCUMENT\u ROOT
),以及如何组合使用它们。我不确定您可能不熟悉此解决方案的哪些元素,但希望下次遇到这种情况时,您不必那么费劲。我在回答中添加了一个部分:关于
DOCUMENT\u ROOT
的问题。你是对的。当我检查$_ServerSuperGlobal的值时,我确实发现文档根正在获取我需要的内容。我将检查您提供的URL+请听我解释。根据您当前的使用情况,您是否建议对文件系统路径使用除文档根以外的任何其他内容?“您建议……”——您的意思是针对您的情况推荐其他内容?我可能只会使用
DOCUMENT\u ROOT
,但我想在这种情况下,您也可以找到
$\u SERVER['SCRIPT\u FILENAME']
(它将反映
index.php
)和
\u FILE\u
(在
configuration.php
中反映
configuration.php
)的通用前缀,然后去掉前缀。您还可以考虑通过从
$\u服务器['SCRIPT\u FILENAME']
中剥离
$\u服务器['REQUEST\u URI']
来查找前缀,如果要这样做,请确保从
REQUEST\u URI
中剥离查询字符串。谢谢您的输入。我要试一试。