【问题标题】:PHP - Main file wont include headerPHP - 主文件不包含标题
【发布时间】:2016-11-18 17:20:18
【问题描述】:

我正在尝试创建一个网站并尽可能多地重用代码。我正在使用 PHP include 语句,但它似乎对我不起作用。目前我只是想让它与页眉一起工作,但我将对导航菜单和页脚做同样的事情。我对 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&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<i class="fa fa-map-  marker">&nbsp Unit 10,11,12, Baldoyle Industrial Estate, Dublin 13, Ireland</a>      </i>
    </div>
    </body>
    </html>

【问题讨论】:

  • 您的 html 页面是保存为 .php 还是仅保存为 .html。您的包含 html 的页面必须保存为 .php 才能运行 php include。
  • 会发生什么?有什么错误吗?输出是什么?另请记住(取决于您的操作系统)文件路径可能区分大小写,而您将其保存在 includes 文件夹中并且您的代码中有 Includes
  • 你显示的这个页面是php页面吗??
  • 大小写正确,全部保存为php文件,绝对不解。语法似乎正确。没有错误,页面运行时没有标题

标签: php html


【解决方案1】:

试试这个,但确保下面的代码必须写在 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>

【讨论】:

【解决方案2】:

由于您的页面需要页眉,请将include 更改为require。这将强制 PHP 在找不到文件时抛出错误(而不是仅仅忽略并继续)。错误的文本将是关键

我敢打赌,您的路径不正确。如果使用相对路径,它必须是相对于包含语句本身的文件,而不是相对于主网站文件夹。我的建议是改用绝对路径。

最后,在开发过程中,我建议您要么启用显示错误,以便在浏览器中查看错误详细信息,要么找出 PHP 记录错误的位置,以便在出现问题时检查那里。

将所有这些放在一起,我建议您将 include 行替换为:

<?php
    error_reporting(E_ALL);     
    ini_set('display_errors', '1');
    require "$_SERVER[DOCUMENT_ROOT]/Includes/Header.php";    
?>

【讨论】:

  • 文档根目录的语法可能会更好,但这是正确的想法。
  • require $_SERVER['DOCUMENT_ROOT']."/Includes/Header.php" 尽量避免在字符串中包含数组,而是将它们连接起来。这没什么大不了的,但它是一种更清洁、更整洁和最佳实践。以及减少 PHP 的工作量。
  • 干净整洁是主观的;我发现另一种方式更清洁,尤其是当有很多变量时。插入和取出字符串以连接变量对我来说似乎很乱。另一方面,最佳实践不是主观的,这对我很重要。如果您能指出我的参考资料,那将很有帮助。官方文档没有说明要避免这种语法 (php.net/manual/en/…)
  • stackoverflow.com/a/13665/3536236 将向您显示连接的速度显着提高。此外,您还引用了不带单引号的数组键,这将引入另一个速度损失。这是Zend PHP Best Pactise 中所述的最佳实践。
  • 最佳实践明确允许我所做的。请参阅framework.zend.com/manual/1.10/en/… 的变量替换部分。不过,您向我展示的性能测试确实很有帮助。我所做的与您建议的之间的差异让我无动于衷(在 100,000 次操作中仅增加了大约 1 毫秒)。但是,测试表明单引号字符串要快得多,因为 PHP 不需要担心解析:require $_S['D'].'/path/to/file.php' 是最好的。谢谢马丁。
【解决方案3】:

这应该是一个评论,但它有点长....

就结构而言,这很混乱(这与您的问题无关,而是您的方法)。 HTML head 部分不应出现在 body 标记内,并且您经常会发现您想要修改 HTTP 标头 - 这需要在 any html 输出之前使用 PHP 代码。

虽然可以将独立的片段放入单独的包含文件中,但这些片段应该格式正确(即在同一个文件中打开和关闭标签)。

更好的方法是使用函数来输出内容的结构元素并从您的页面脚本中调用这些元素,除了确保您的 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 中,并且该文件的权限允许您的网络服务器读取它。当您遇到问题时,阅读错误日志总是一个好主意)。

【讨论】:

    【解决方案4】:

    这是来自cmets的积分集合,都还不错:

    • 您的语法可以使用空格:include "file.php";

    • 您的包含应被视为区分大小写,在 LAMP 上区分大小写是一个标准。养成一个好习惯。

    • Includes 需要在 PHP 页面上运行,如果您的页面是 HTML,它将不包含任何内容。 PHP 可以包含任何页面,它不需要总是调用 PHP 页面。

    • 打开 PHP 错误日志以检查包含不显示的原因是什么。见PHP Error Displaying

    • 确保您的包含文件确实包含要输出到浏览器的内容!

    • Includes 和 requires 以​​及他们的 _once 对应物在他们的工作方式上几乎都是相同的(这个问题的答案令人震惊,他们认为答案只是从 include 变为 require将使其工作,或者更改为include_once 将使其突然工作。

      require 的区别在于,如果调用失败,那么 PHP 会以错误结束脚本。因此,包含的内容是必需的(高帽!)。

    目录

    包含通常从您当前的工作 PHP 目录开始,因此如果您有一个位于 /home/account/public_html/horses/index.php 的文件,并且您包含来自根 html 目录 /home/account/public_html/include.php 的文件,则无法从当前目录(@ 987654333@.

    要回避上述整个问题,您应该使用包含具有绝对文件路径的文件的最佳做法,例如在包含您帐户的公共网站区域内的文件时使用$_SERVER['DOCUMENT_ROOT']。如果包含来自您帐户其他部分的文件,则仍需手动提供绝对路径,(使用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 文档根文件夹中。

    【讨论】:

      【解决方案5】:

      PHP 根目录与标准根目录的读取方式不同。尝试用以下代码替换您的代码:

      include($_SERVER['DOCUMENT_ROOT']."Header.php");
      

      【讨论】:

      • 您应该删除括号,并且您需要在文件前添加一个斜杠:include $_SERVER['DOCUMENT_ROOT']."/Header.php";
      • 此代码将按照编写的方式工作。 server[document_root] 将返回 "/foldername/" 这将使字符串 /foldername/header.php
      • 好吧,在我为$_SERVER 设置的文档根目录没有尾部斜杠,也许这在不同的服务器上会发生变化,但我会要求您确保代码有效?
      【解决方案6】:

      上面的解决方案是正确的,只是小小的改变:

      <?php include_once("Includes/Header.php"); ?> // or
      <?php require_once("Includes/Header.php"); ?>
      

      【讨论】:

      • 为什么这能解决问题?
      • 如果我们使用 include_once()require_once() 它将只包含一次,而 include()require() 如果你已经调用了这两个 10 次,那么它将在页面中包含 10 次。
      • 但是 OP 的问题是包含不会显示一次,所以这并不能解决这个问题
      • 没有任何作用,仍然无法显示标题
      猜你喜欢
      • 1970-01-01
      • 2016-02-03
      • 2012-10-28
      • 2019-06-07
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多