PHP包含文件从另一个目录


php include file from another directory

下面是一个结构示例:

/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,但如果我这样做,它将无法在位于主目录中的文件上工作。

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

在站点的<head>部分,插入具有href属性的<base>元素。将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加载您的样式表。

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

这与include中的路径工作方式有关。我建议尽可能从文档的根目录开始。

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

不使用相对路径:

href="css/style.css"

使用绝对路径:

href="/css/style.css"

您应该从根目录包含css文件。所以/css/style。css它总是从根目录开始,然后再往下走。我相信这应该能解决你所有的问题。

首先,问题是你的CSS文件链接是错误的。最好的做法是查看页面的HTML输出(查看源代码)。我们来分解一下(form 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

从已经调用的文件中使用相对包含总是有问题,每次指定相对位置时,请替换

../some_directory/some_file.php

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

dirname(__FILE__)为当前目录

我可以解释一下您的问题以及如何解决吗?

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'
?>

要了解有关include的更多信息,请参阅本页

你有两个选择

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

ie。

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