我正在尝试创建一个网站并尽可能多地重用代码。我正在使用 PHP 包含语句,但它似乎对我不起作用。目前,我只是想让它与页眉一起使用,但我将对导航菜单和页脚做同样的事情。我对HTML还不够新手,今天才开始学习PHP的包含部分,所以任何帮助都非常感谢。头文件位于主网站文件夹中包含的"包含"文件夹中。谢谢。
<body>
<?php include"Includes/Header.php";?>
<div class="container-fluid">
<div id="menu">
<ul id="menu">
<li><a href="#Home">Home</a></li>
<li><a href="#OurProducts">Our Products</a></li>
<li><a href="#OurBrands">Our Brands</a></li>
<li><a href="#ContactUs">Contact Us</a></li>
</ul>
</div>
</div>
<div id="img1">
<img src="lasange.jpg" alt="lasange">
</div>
</body>
标头代码
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font- awesome/4.4.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="NewHomepageStyleSheet.css">
</head>
<body>
<div id="toplocation">
<i class="fa fa-fax"></i>
(01)-8393790      <i class="fa fa-map- marker">  Unit 10,11,12, Baldoyle Industrial Estate, Dublin 13, Ireland</a> </i>
</div>
</body>
</html>
试试这个,但要确保下面的代码必须写在php文件中:
<body>
<?php include("Includes/Header.php"); ?> // or
<?php require("Includes/Header.php"); ?>
<div class="container-fluid">
<div id="menu">
<ul id="menu">
<li><a href="#Home">Home</a></li>
<li><a href="#OurProducts">Our Products</a></li>
<li><a href="#OurBrands">Our Brands</a></li>
<li><a href="#ContactUs">Contact Us</a></li>
</ul>
</div>
</div>
<div id="img1">
<img src="lasange.jpg" alt="lasange">
</div>
</body>
由于您的页面需要标题,因此请将include
更改为 require
。 这将迫使 PHP 在找不到文件时抛出错误(而不仅仅是忽略并继续)。 错误的文本将是关键
我敢打赌,你的道路是不正确的。如果使用相对路径,则它必须相对于带有 include 语句本身的文件,而不是相对于主网站文件夹。我的建议是改用绝对路径。
最后,当你在开发时,我建议你要么启用显示错误,这样你就可以在浏览器中查看错误细节,或者找出PHP记录错误的位置,以便在出现问题时可以检查那里。
综上所述,我建议您将include
行替换为:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
require "$_SERVER[DOCUMENT_ROOT]/Includes/Header.php";
?>
这应该是一个评论,但它变得有点长......
就结构而言,这是混乱的(这不是关于你的问题,而是你的方法)。HTML head 部分不应该出现在 body 标签中,而且你经常会发现你想要修改 HTTP 标头 - 这需要 PHP 代码才能进行任何 html 输出。
尽管存在将自包含片段放在单个包含文件中的情况,但这些片段的格式应该正确(即同一文件中的打开和关闭标记)。
更好的方法是使用函数输出内容的结构元素并从页面脚本中调用这些元素,除了确保您的 HTML 格式正确之外,它还可以保护您免受直接从包含文件发出部分内容时引入的安全漏洞,当其 URL 直接键入到浏览器中时。
考虑:
<?php
define('BASE_PATH', dirname(__FILE__)); // defining as root for your app simplifies includes
include(BASEPATH . '/pageTemplate.php');
include(BASEPATH . '/menu.php');
?>
<html>
<head>
<title>My demo page</title>
<?php template_required_css_and_js(); ?>
</head>
<body>
<?php template_body_start(); ?>
...
<?php menu(); ?>
...
<?php template_body_end(); ?>
</body>
</html>
(顺便说一句:选中"."在您的 php 中.ini include_path并且文件的权限允许您的网络服务器读取它。遇到问题时,阅读错误日志始终是一个好主意)。
这是评论中的要点集合,所有这些都非常好:
-
您的语法可以与空格有关:
include "file.php";
。 -
您的包含应被视为区分大小写,在 LAMP 上区分大小写是一个标准。养成是个好习惯。
-
Include
需要在PHP页面上运行,如果你的页面是HTML,它将不包含任何内容。PHP 可以包含任何页面,它不需要总是调用 PHP 页面。 -
打开 PHP 错误日志记录以检查不包含不显示的原因是什么。请参阅 PHP 显示错误。
-
确保您的包含文件确实包含要输出到浏览器的内容!
-
Include
s 和require
s 及其_once
对应物的工作方式几乎相同(在这个问题上,有很多人认为从include
更改为require
会让它工作,或者更改为include_once
会让它突然工作。与
require
的区别在于,如果调用失败,则 PHP 会以错误结束脚本。因此,包含的内容是必需的(高帽!
目录
包含通常从当前工作的 PHP 目录开始,因此如果您在 /home/account/public_html/horses/index.php
中有一个文件并且您包含来自根 html 目录的文件/home/account/public_html/include.php
则无法从当前目录相对访问该文件/horses/
。
要避开上述整个问题,您应该使用包含具有绝对文件路径的文件的最佳做法,例如使用 $_SERVER['DOCUMENT_ROOT']
if 包含您帐户的公共网站区域内的文件。如果包含来自帐户其他部分的文件,则仍然提供绝对路径,但手动(使用DEFINE
或类似方法会有所帮助),例如:/home/account/extras/include.php
每个方案的几个示例:
相对路径:
include "folder/file.php";
上图:文件夹需要与运行包含的文件位于同一目录中。
include "../parentfolder/folder/file.php";
上图:这是行不通的。包含不能更改当前工作目录上方的相对目录。
include $_SERVER['DOCUMENT_ROOT']."/folder/file.php";
// reference address: /home/account/public_html/folder/file.php
上图:此包含将从您网站任何位置的任何页面显示,只要包含位于 HTML 文档根目录(通常为 public_html
内)。我建议使用$_SERVER['DOCUMENT_ROOT']
作为标准方式或引用包含。
define("RootHost","/home/account/secret");
include RootHost."/folder/file.php";
// reference address: /home/account/secret/folder/file.php
上面的代码通常用于包含网站浏览器无法访问的内容,例如不在public_html
HTML 文档根文件夹中的内容。
PHP根目录的读取方式与标准根目录不同。 尝试用以下内容替换您的代码:
include($_SERVER['DOCUMENT_ROOT']."Header.php");
上面的解决方案是正确的,只是很小的更改:
<?php include_once("Includes/Header.php"); ?> // or
<?php require_once("Includes/Header.php"); ?>