繁体   English   中英

PHP Url相对和绝对

[英]PHP Url Relative and Absolute

我有这个课:

class PageBuilder {
    public function GetHeader() {
        include(dirname(dirname(__FILE__)) . '/template/header.php');
    }
}

调用时会将头文件插入我的页面。 一切都很好。

$page_builder->GetHeader();

header.php是包含菜单的HTML文件的顶部。 我的问题是,取决于从何处调用PageBuilder来更改菜单链接URL

如何确保它们始终相对于根文件夹。

dirname(__FILE__)不起作用,因为它将URL转换为file:/// ,我也真的不想附加整个http://www.blahblah.com/blah因为如果它是相对于根目录的没关系。

编辑

因此,就像有人发布的那样,您可以使用$_SERVER['']但是哪一个是可靠的,毫无疑问PHP会带来一些令人震惊的警告。

看到我在想$_SERVER['SERVER_ADDR']$_SERVER['SERVER_NAME']$_SERVER['HTTP_HOST'] .....

现在进入$_SERVER['HTTP_HOST'] ..结果失败。

只是以/前缀到localhost根,因此我的链接是localhost/admin/profile.php而不是localhost/TestApp/admin/profile.php ,我是否必须实际指定它位于名为TestApp文件夹中?

您需要首先区分本地文件路径URL 两者彼此无关。 PHP及其__FILE__dirname()及其相关部分仅处理服务器硬盘上的本地文件路径。 另一方面,URL完全是任意字符串, 需要以明智的方式将它们放在一起。 URL可以通过多种方式来引用任何一个特定文件,这取决于顺序。

可以尝试使用$_SERVER可用的各种路径来确定请求了哪个URL,然后根据该路径构造相对URL。 但是,这很容易出错并且过于复杂。 而是应该使用相对于根的URL。 即代替

foo/bar.html

相对于浏览器当前所在的URL,您始终使用

/foo/bar.html

无论当前相对于哪个URL,它始终引用相同的URL。

如果您需要所有URL的前缀,我将创建一个包装器函数,根据配置或根据$_SERVER自动确定其自身的根URL,根据需要添加此包装器函数。

经过@deceze的反复试验后,我只是通过路由类传递我的URL ,该路由类以'/ TestApp /'作为URL前缀,如果由于使用类而使项目被移动,则可以很容易地对其进行更改。

所以我做:

<a href="<?php $url_routing->ParseUrl('admin/account/logout.php') ?>">Log Out </a>

通过:

public function ParseUrl($url) {
    return '/TestApp/' . $url;
}

这几乎不是最佳实践,但是不可能有不遵循任何本身的语言的最佳实践。

看看使用$_SERVER['PHP_SELF']; @Anthony答案$_SERVER['PHP_SELF']; 它始终会提供TestApp文件夹。 需要更多调查,但我会考虑的。 我假设它相对于服务器地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM