【发布时间】:2013-11-01 05:07:13
【问题描述】:
我目前正在开发一个 PHP 项目,正在寻找一种方法来获取网站根目录的 URL;我在根目录有一个配置文件,所以我想用它来找出“基本 URL”。我正在寻找一种动态执行此操作的方法,以便我可以找到网站根目录的 URL,即http://domain.com/my_app/。我正在尽我最大的努力避免使用相对路径,并使用 PHP 为我正在使用的任何内容生成 URL。例如,我正在使用 PHP 生成 CSS 代码和 CSS 代码链接到图像,所以我想在这里获取一个绝对 URL 而不是相对路径。
my_app/
admin/
resources/
css/
admin-css.php
imgs/
login.png
resources/
css/
css.php
imgs/
my-image.png
shared-image.png
config.php
在我的resources/css/css.php 文件中,我正在寻找“基本 URL”,因此我可以生成指向 imgs 文件夹的绝对 URL,例如 http://domain.com/resources/imgs/my-image.png,但目前我正在获取 http://domain.com/resources/css/imgs/my-image.png,因为下面的定义看起来在获取加载的 PHP 文件的目录,而不是包含的目录。我还想在文件夹之间共享图像(即从admin 文件夹访问shared-image.png 文件),因此获取基本 URL 将是生成链接的理想选择。我避免使用相对路径的原因是因为我有一个创建 URL 的函数,createURL(),所以我可以让所有 URL 工作而无需硬编码任何东西。
<?php
DEFINE('HTTP_TYPE', $_SERVER['HTTP_X_FORWARDED_PROTO']);
DEFINE('HTTP_ROOT', $_SERVER['HTTP_HOST']);
DEFINE('HTTP_FOLDER', dirname($_SERVER['PHP_SELF']) . '/');
DEFINE('BASE_URL', HTTP_TYPE . "://" . HTTP_ROOT . HTTP_FOLDER);
function createURL($pathFromRoot)
{
return BASE_URL . $pathFromRoot;
}
所有这些定义都位于我的配置文件中,所以我认为最好的方法是获取配置文件的 URL (http://domain.com/my_app/config.php),然后去掉“config.php”。请记住,该网站可以在文件夹结构 http://domain.com/my_app/another/folder/config.php 或没有子文件夹 http://domain.com/config.php 的更深处托管。
这可能吗,如果可以,怎么做?还是我应该遵循另一种方法?
【问题讨论】:
-
是客户端的URL,还是服务端的路径? (另请注意,
HTTP_X_FORWARDED_PROTO仅在客户端发送X-Forwarded-Proto标头时才设置,但并非总是如此。) -
不清楚,您在
resources/css中并希望获得my_app/或者您在我的应用程序中,包括resources/css中的一个文件并获得这个? -
你不能只解析你想要的URL部分吗?您使用当前的 BASE_URL 并在错误的地方进行拆分?
-
@zneak 客户端 URL @lampwins 我在
resources/css目录中,想获得my_app/,我已经编辑了我的问题。 @MichaelVilleneuve 问题是我不一定知道哪一部分会出错,我不想硬编码任何东西 -
@allejo 你不知道什么不好,但你知道什么是好的吗?如果是这样,我得到了你的答案
标签: php