代码之家  ›  专栏  ›  技术社区  ›  coldpumpkin

php包含来自另一个目录的文件

  •  8
  • coldpumpkin  · 技术社区  · 13 年前

    下面是一个结构示例:

    /main
     /css
      style.css
     /include
      article1.php
      article2.php
     header.php
     index.php
    

    在我的header.php中,我有以下css代码:

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

    例如,在我的index.php中,我有以下内容作为第一行:

    <?php include 'header.php'; ?>
    

    现在,一切正常。接下来,我将在article1.php文件中插入以下代码:

    <?php include '../header.php'; ?>
    

    内容(菜单和其他html)显示正确,但CSS根本无法显示/识别。基本上,所发生的情况是头文件被包括在内,但服务器不尊重目录父级。为了正确显示CSS,我必须更改 link rel 用于CSS ../css/style.css ,但如果我这样做,它将无法对位于主目录中的文件起作用。

    我希望我把问题说清楚了。我做错了什么?如何包含来自不同目录的文件并保留其中的链接?

    8 回复  |  直到 13 年前
        1
  •  20
  •   Matt    13 年前

    在您的网站 <head> 节,插入 a <base> element href 属性设置 href公司 属性到您网站的基本URL,以及 相对的 请求将通过该基本URL发送。

    <base href="http://my-website-url.com/" />
    <link rel="stylesheet" type="text/css" href="css/style.css" />
    

    使用正确的设置 base 标记,用户的浏览器将尝试从URL加载样式表 http://my-website-url.com/css/style.css .

    注意:这不仅会影响样式表,还会影响文档中的所有相关链接。

        2
  •  15
  •   mikevoermans    13 年前

    这与路径在includes中的工作方式有关。我建议尽可能从文档根目录中进行路径设置。

    <?php include( $_SERVER['DOCUMENT_ROOT'] . '/header.php' ); ?>
    

    这将适用于您的任何文件。

        3
  •  5
  •   bubba    13 年前

    不使用相对路径:

    href="css/style.css"
    

    使用来自webroot的绝对路径:

    href="/css/style.css"
    
        4
  •  3
  •   Jacob Waller    13 年前

    您应该从根目录中包含css文件。所以/css/style.css是这样的,它总是从根开始,然后从那里往下走。我相信这在任何情况下都能解决你的问题。

        5
  •  3
  •   UnholyRanger    13 年前

    首先,问题是指向CSS文件的链接是错误的。最好的做法是查看页面中HTML(视图源代码)的输出。因此,让我们将其分解(表单index.php):

    Index.php 位于 domain.tld/index.php 。您的css文件位于 domain.tld/css/* 。查看索引文件时,您的标头为

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

    这之所以有效,是因为您位于目录(或根目录)的顶部,并且链接是相对于该目录创建的。现在,当你去 domain.tld/include/article1.php ,您不再处于根位置。它正在尝试访问:

    domain.tld/include/css/style.css
    

    这意味着你必须建立完整的链接或改变你的亲戚。由于CSS位于根目录,因此简单的方法就是使用以下内容

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

    这意味着它将查看css目录的域的根目录 domain.tld/css/styles.css 。如果您的顶级目录是 /main 使用 /main/css/styles.css

        6
  •  3
  •   SteeveDroz    13 年前

    使用已被称为includes的文件中的相对includes总是一个问题,每次指定相对位置时,请替换

    ../some_directory/some_file.php
    

    具有

    dirname(dirname(__FILE__)) . '/some_directory/some_file.php'
    

    dirname(__FILE__) 是当前目录。

        7
  •  2
  •   sorak Xavier S.    8 年前

    我可以解释一下你的问题以及如何解决它吗。

    php中的include和C中的一样工作。 当您包含将页面内容复制/粘贴到第一个页面中的页面时。

    因此,有两个文件:

    包括php

    <?php
    $var = 'PHP';
    ?>
    

    主要.php

    <?php
    include 'include.php';
    echo $var; // affiche 'PHP'
    ?>
    

    当您请求“main.php”页面时,您将得到以下内容:

    <?php
    $var = 'PHP';
    echo $var; // affiche 'PHP'
    ?>
    

    因此,如果您需要在页面中包含一个元素。您有两种选择:

    1.绝对路径(更好的方式)

    不要使用相对路径,而是使用绝对路径。这种方式允许您在不使用当前路径的情况下从任何地方包含文件。

    2.变量

    您可以使用包含存储库/网站根目录的相对路径的变量。因此,每次您必须包含一个页面或创建一个页面时,都必须定义一个变量,如下所示:

    包括php

    <?php
    $var = 'PHP';
    echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$currentPath."css/style.css\" />";
    ?>
    

    主要.php

    <?php
    # path to the root of the website
    $currentPath = "../";
    
    include 'include.php';
    echo $var; // affiche 'PHP'
    ?>
    

    要了解有关include的更多信息, see this page

        8
  •  1
  •   Philipp    13 年前

    你有两个选择

    1. 将相对路径传递到包含的文件

    即。

    <link rel="stylesheet" type="text/css" href="<?=$path ?>css/style.css" />
    

    $path = "../";
    include "header.php";
    

    或2。使用文件的绝对路径

    <link rel="stylesheet" type="text/css" href="/css/style.css" />
    
    推荐文章