【问题标题】:PHP Include PathsPHP 包含路径
【发布时间】:2011-02-15 14:25:58
【问题描述】:

我是 PHP 新手,尝试使用 include 链接我的 CSS 文件时遇到问题。

基本上,无论文件位于多远,我都需要将我的文件链接回某个目录。我试过使用

<?php
    include $_SERVER['DOCUMENT_ROOT'] . '/sysprogs/required/header.html'; 
?>

但是 header.html 包含指向我的 css 文件的链接,因此它最终在其中查找 css 文件的目录是

http://localhost/SysProgs/software/CSS/style.css

而不是我想要它去的地方

http://localhost/SysProgs/required/CSS/style.css

我希望这是有道理的,我希望你能帮助我

感谢大家的帮助!

【问题讨论】:

    标签: php css absolute-path


    【解决方案1】:

    一个想法

    使用header.html 中的完整网址。这将是明确且可靠的。

    <head>
    <link href="/FULL_BASE_URL/style/style.css" rel="stylesheet" type="text/css" />
    </head>
    

    另一个想法

    使用&lt;base&gt; 标头标签。这允许您为链接(包括 CSS)指定一个基本 URL,并且可能在短期内需要最少的工作(请参阅下面的注释)。

    <head>
    <base href="FULL_BASE_URL" />
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    </head>
    

    更多信息请访问w3schools

    注意:正如base 下面的 cmets 所述,最终可能会导致更多的混乱而不是值得。

    【讨论】:

    • +1。在我看来,在包含脚本和 CSS 时,您应该始终在 HTML 中使用绝对路径;除非您正在构建用于分发的高可移植性脚本,否则使用绝对路径意味着您无需再次猜测资源文件是否会加载。
    • 基础不好,因为会导致代码混乱,而绝对路径总是明确的
    • 你们是对的。我已经编辑了我的回复以包含警告。谢谢。
    • &lt;base&gt; 很可怕,因为它会影响文档中的所有非绝对网址。
    【解决方案2】:

    首先要了解的是,您的问题与 PHP 无关。它就像您的 HTML 问题中的文件名一样简单。如果没有 PHP,它将保持不变。只需使用 CSS 文件的绝对路径

    还有一件事要考虑:考虑接受一些问题。

    【讨论】:

    • 投了反对票,因为该问题专门询问如何以可移植方式引用静态路径。
    【解决方案3】:

    我喜欢在应用程序的中心位置同时定义绝对路径和 webroot:

    <?php
    
      define("APP_WEBROOT", "/myapp"); 
      define("APP_ROOTDIR", "/home/www/example.com/htdocs/myapp");
    
     ?>
    

    然后您可以像这样“绝对化”正确的链接:

    <?php echo APP_WEBROOT; ?>/software/CSS/style.css
    

    我更喜欢这个

    • 超过&lt;base&gt;,因为该标签会造成混乱并使代码从长远来看更难以维护

    • 不要使用绝对路径 /software/CSS/style.css,因为这会使您无法将应用程序安装在您选择的子目录中:您将始终绑定到根目录。

    【讨论】:

    • 您在项目中使用第一个吗?
    • @Col 不是这种确切的形式,但原则上是的(我经常使用conf() 函数)。为什么?
    • 我认为这是多余的。您的应用程序的 webroot 通常与 / 不同,以使用这样的构造 对于您网站上的每个链接
    • @Col 视情况而定。我有时会编写作为包分发的 Web 应用程序,并且需要能够安装在 Web 根目录 (www.example.com/myapp/version2/...) 以外的目录中。对于这种情况,我还没有找到比显式定义基本路径更简单的解决方案 - DOCUMENT_ROOT 在这里不起作用。 (我自己也不是很喜欢,如果有更简单的想法我总是很感兴趣。)
    • 将 http://.../ 部分添加到您的路径是没有意义的。您的 webroot 应以斜杠开头。这允许与不同的主机名兼容。
    【解决方案4】:

    我绝对不会使用&lt;base&gt;。我以前遇到过很多问题。如果您使用&lt;base&gt;,您的所有链接都将相对于该基值。

    相反,我建议为公共目录设置 PHP 常量。例如:

    PHP 代码:

    <?php
        define('CSS_DIR', '/SysProgs/required/CSS/');
    ?>
    

    HTML 代码:

    <link href="<?php echo CSS_DIR ?>style.css" rel="stylesheet" type="text/css" />
    

    【讨论】:

    • 我实际上在我的主机上尝试过这个,但我收到了这些错误:keironlowe.host56.com/software 它们是什么意思?
    • 看起来您在某处缺少斜线。 /usr/local/apache/htdocsrequired/intro.phphtdocs 后面应该有一个斜线。
    • 是的,我查看了我的代码,但无处可见
    • 好的,我的坏处有一个斜线,我已经修复了它,但它仍然出现错误
    • 看起来是权限问题。查看this link 了解更多信息。您可能想发布有关此错误的另一个问题。
    【解决方案5】:

    我在设计网站时经常遇到这个问题。当我有自定义 CMS 时,我使用以下内容:

    $basedir = "root_directory/";
    $basedirPHP = $_SERVER['DOCUMENT_ROOT'].$basedir;
    $basedirHTML = "http://".$_SERVER['SERVER_NAME'].$basedir;
    

    我定义了 $basedir,因此我可以毫不费力地将站点移动到服务器中的不同子目录。 $basedirPHP 和 $basedirHTML 是这样我可以在链接 CSS、JS 等时使用 php 或像您提到的那样调用文件。

    如果您使用的是 wordpress,只需使用良好的 ol'bloginfo('template_directory'); 在模板文件中执行相同操作。

    【讨论】:

    • 我会避免将 CSS 目录包含在您使用的任何变量中,因为您无法灵活地将变量用于其他目录中的文件。不过,这只是我的偏好。没有什么能阻止您为正在使用的每个目录设置一个变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2013-11-09
    • 2014-05-19
    相关资源
    最近更新 更多