【问题标题】:Is it possible to prevent headers to send again?是否可以防止标头再次发送?
【发布时间】:2013-03-20 11:00:22
【问题描述】:

想象一下:

<?php
include_once('galeria.php');
?>

galeria.php 文件是一个完整的 html/php 文件。 是否可以包含文件并防止标题再次发送? 我只是不想使用 iframe 或更改我的包含文件。

【问题讨论】:

  • 这会自己做的..
  • galleria.php 的 head 部分会再次加载对吗?

标签: php iframe header include


【解决方案1】:

您使用“标题”一词使所有人感到困惑。标头是 Web 服务器发送的内容,用于告诉浏览器如何处理有效负载。你说的是 HEAD,我怀疑是 HTML 和 BODY 标签。

好吧,任何明智的人都会简单地将文件分成几个部分,但出于某种奇怪的原因(您没有告诉我们原因),您声明您不希望这样做。在这种情况下,您可以读取 galeria.php 文件并使用 PHP 的 DOM 类方法(首选)或一些 REGEX(不太好)从 galeria.php 文件中提取正文有效负载。

你能告诉我们为什么你不想明智地设计这个吗?

【讨论】:

  • 很抱歉造成混乱 :-) 对许多文件和我所包含的文件提供了另一个建议,因此我无法更改它们。有趣的 PHP DOM 类方法
【解决方案2】:

标头只发送一次——就在第一个字节发送到浏览器之前。字节可以通过(例如)echo()print()&lt;?php ?&gt; 部分之外的文字文本/html 发送到浏览器。

如果包含galeria.php 的文件不需要明确发送任何标题,那么您无需担心。

否则 - 如果您的文件包含galeria.php 需要 显式发送标头,您可以缓冲galeria.php 的输出,如下所示:

  • 首先,调用ob_start()(将所有输出重定向到临时缓冲区),
  • 然后包括galeria.php(输出被发送到缓冲区,而不是浏览器。标题还没有发送),
  • 然后根据需要通过header() 发送标头,
  • 调用ob_end_flush() 将缓冲区内容发送到浏览器(以及所有默认标题)。

http://www.php.net/manual/en/function.ob-start.phphttp://php.net/manual/en/book.outcontrol.php

【讨论】:

    【解决方案3】:

    include_once

    include_once 语句在脚本执行期间包含并评估指定文件。这是一种类似于include 语句的行为,唯一的区别是如果文件中的代码已经被包含,它将不会再次被包含。顾名思义,它将只包含一次。

    Official Document

    【讨论】:

    • 但是主文件已经加载了自己的head部分,galleria.php文件还有另一个head部分,将使用include_once('galleria.php')加载
    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2018-11-04
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多