【问题标题】:PHP getting document path relative to site rootPHP获取相对于站点根目录的文档路径
【发布时间】:2012-11-25 23:25:25
【问题描述】:

我正在尝试在包含所有 CSS 链接信息的头文件中链接一个单独的 php 文档,这样如果我想更改网站的设计,我只需在一个位置更改 css 路径(特别是对于各种配色方案。当我添加更多方案时,我可以将它们放在这个文件中的 switch 语句中,而不是遍历每一页。

我正在尝试编写代码,以便无论它在哪个服务器上运行(我的本地测试服务器或远程站点服务器)它都能正常工作,而无需更改任何路径信息。

从我阅读的内容来看,$_SERVER['DOCUMENT_ROOT'] 似乎是找到站点基本文件夹路径的最佳方式,这样无论页面文件位于何处,我都可以找到服务器文件夹/css 文件。

这是我如何设置的示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>

<!--Meta Information-->

<!--CSS Info-->
<?php 
    require_once("styles/cssstyle.php");
?>

<title></title>
</head>
<body>

<!--pushes site down from top of screen -->
<div id="topmargin"></div> 

<!-- sets div for site content (puts in middle) -->
<div id="_body">          

    <div id="banner">                        
        <div class="logo"></div>      
        <div class="text"></div>
        <div class="bannerstrip"></div>
    </div>

    <!--portion for site navigation-->
    <div id="navigation">                               
        <ul class="navlinks">                            
            <li><a href="index.php">home</a></li>
        </ul>
    </div>

    <!--Holds all site usable/readable content-->
    <div id="leftwindow">                              

    </div>

    <div id="rightwindow">

    </div>

    <div id="rightwindow">

    </div>
</div>


</body>
</html>

CSS php 文件是这样的:

   <?php
echo "<link rel='stylesheet' type='text/css' href='styles/default.css'/>";
echo "<link rel='stylesheet' type='text/css' href='" . $_SERVER['DOCUMENT_ROOT'] . "styles/basicblue.css'/>";  
echo "<link rel='stylesheet' type='text/css' href='" . $_SERVER['DOCUMENT_ROOT'] . "styles/forms.css'/>";
echo "<link rel='stylesheet' type='text/css' href='" . $_SERVER['DOCUMENT_ROOT'] . "styles/loginform.css'/>";
echo "<link rel='stylesheet' type='text/css' href='" . $_SERVER['DOCUMENT_ROOT'] . "styles/newscontent.css'/>";
?>

我确定 DOCUMENT_ROOT 已设置到正确的位置,但我的样式没有显示出来。我错过了什么吗?有没有更可靠的设置方法?

【问题讨论】:

  • 我很肯定这与查找路径有关,因为当我直接链接到 index.php 中的样式时,样式可以正常工作
  • 你试过查看生成的源代码吗? $_SERVER['DOCUMENT_ROOT'] 返回当前脚本正在执行的文档根目录。这是一个服务器端路径,所以它不能在客户端工作。
  • 我在我的电脑上安装了一个 apache 服务器来进行测试。当我查看实时代码时,它看起来路径是正确的。我浏览到文件来比较路径,它们是相同的,这是我不完全理解的。有一个区别:斜线方向相反,但这对 php 来说应该没关系,不是吗?

标签: php html css


【解决方案1】:

呼应 Mike 上面所说的,根据我的经验,$_SERVER['DOCUMENT_ROOT'] 只是在服务器上查找文件的最佳选择。如果您需要 php 包含或需要某些内容,请使用 DOCUMENT_ROOT 找到服务器端路径。

但是,css 文件是客户端。它们包含在相对网站路径中。如果您要改为这样做

<link rel='stylesheet' type='text/css' href='/styles/newscontent.css'/>

href 中的开头/ 告诉浏览器始终从您的域的根目录检索它:http://yourdomain.com/styles/newscontent.css。

【讨论】:

  • 由于某种原因,当我添加 / 它仍然找不到它。它只是让我找到它相对于文档,而不是根文件夹
  • 这是它在实时代码中的显示方式: 但它没有正确链接。这意味着 cssstyle.php 正在被访问,但 css 链接本身仍然被破坏
  • 没关系,想通了。站点根文件夹指向的位置有问题(它指向服务器根文件夹,而不是站点根文件夹)
【解决方案2】:

你必须使用 $_SERVER["DOCUMENT_URI"] 而不是 $_SERVER["DOCUMENT_ROOT"] ,像这样:

echo "<link rel='stylesheet' type='text/css' href='" . dirname($_SERVER['DOCUMENT_URI']) . "/styles/basicblue.css'/>";

【讨论】:

  • 虽然对我不起作用(REQUEST_URI),但不确定为什么当脚本位于 3 个子文件夹中时它只返回“/”。
【解决方案3】:

我结束了减去网络根路径以获得相对路径

str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER["SCRIPT_FILENAME"]);

所以不是/home/u/username/example.com/public_html/webfolder/index.php 你会得到/webfolder/index.php

编辑: 在构造的情况下,您的文件名会以某种方式重复文档根目录,因此上面的代码将无法正常工作。这更防弹(计数符号并删除它们)

substr($_SERVER["SCRIPT_FILENAME"],strlen($_SERVER['DOCUMENT_ROOT']));

【讨论】:

    【解决方案4】:

    我的案例包括一个 JS 脚本,它与 PHP 脚本位于同一文件夹中。

    我使用以下方法获取从站点根目录到脚本文件夹的路径:

    <script src="<?php echo str_replace($_SERVER['DOCUMENT_ROOT'], '', __DIR__); ?>/script.js"></script>
    

    这很好用。

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 2011-12-19
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多