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

时间:2013-03-28 13:43:28

标签: php include

这是一个结构示例:

/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,我必须将CSS的link rel更改为../css/style.css,但如果我这样做,它将无法处理位于主目录中的文件。

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

8 个答案:

答案 0 :(得分:20)

在您网站的<head>部分,使用href属性插入a <base> element。将href属性设置为您网站的基本网址,所有相对请求都将通过该基本网址发送。

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

使用正确设置的base代码,用户的浏览器会尝试从网址http://my-website-url.com/css/style.css加载样式表。

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

答案 1 :(得分:13)

它与路径的工作方式有关。我建议尽可能从doc root中获取信息。

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

这适用于您的任何文件。

答案 2 :(得分:5)

而不是使用相对路径:

href="css/style.css"

使用来自webroot的绝对路径:

href="/css/style.css"

答案 3 :(得分:3)

您应该从根目录中包含您的css文件。所以/css/style.css所以它总是从根开始然后从那里开始。我认为应该在所有情况下解决你的问题。

答案 4 :(得分:3)

首先,问题是您的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

答案 5 :(得分:2)

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

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

所以,有两个文件:

include.php

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

main.php

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

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

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

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

<强> 1。绝对路径(更好的方式)

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

<强> 2。变量

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

include.php

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

main.php

<?php
# path to the root of the website
$currentPath = "../";

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

要详细了解包含,see this page

答案 6 :(得分:1)

您有两个选择

  1. 将相对路径传递给包含的文件
  2. 即。

    <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" />
    

答案 7 :(得分:1)

使用相对包含来自已经被称为包含的相关包含始终是个问题,每次指定相对位置时,请替换

../some_directory/some_file.php

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

dirname(__FILE__)是当前目录。