doulu1945 2014-04-14 08:52
浏览 37
已采纳

PHP Url相对和绝对

I have this class:

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

Which when called will insert the header file into my page. All is good.

$page_builder->GetHeader();

In the header.php is the top of the HTML file which includes a menu. My problem is, depending on where the PageBuilder gets called from changes the menu link URLs.

How do I make sure they are always relative to the root folder.

dirname(__FILE__) doesn't work because it turns the URL into file:///, also I really don't want to append the entire http://www.blahblah.com/blah because if it is relative to the root it doesn't matter about any of that.

EDIT

So as someone posted you can use $_SERVER[''] but which one is reliable, no doubt PHP will have put in some blinding caveats.

See I was thinking $_SERVER['SERVER_ADDR'] or $_SERVER['SERVER_NAME'] or $_SERVER['HTTP_HOST'] .....

Going $_SERVER['HTTP_HOST'] for now .. result is fail.

Just prefixing with / resolves to the localhost root so my links are localhost/admin/profile.php rather than localhost/TestApp/admin/profile.php, Do I have to actually specify that it sits in folder named TestApp?

  • 写回答

2条回答 默认 最新

  • dongya2029 2014-04-14 09:33
    关注

    After trial and error with the help of @deceze I simply pass my URL through a routing class which prefixes the URL with '/TestApp/' this can be change easily if the project gets moved because the use of classes.

    So I do:

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

    Gets passed through:

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

    It is hardly best practice, but there can't be best practices with a language that doesn't follow any itself.

    Looking at @Anthony answer of using $_SERVER['PHP_SELF']; it does always give the TestApp folder. Needs more looking into but I will take that. I assume its relative to the server address.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同