PHP在顺序包含文件时插入奇怪的空间

标签 php css html templates

我正在编写一个包含由配置文件定义的 template.phtml 文件的应用程序,该函数看起来类似于此:

View.php,View->render() :

public function render(){
    $this->addTemplates();
    if($this->vars !== null) extract($this->vars);

    if($this->options['noTemplates'] === False){
        foreach($this->templates['before'] as $fn){
            if(file_exists($fn)){
                include($fn); // <-- This is where templates are included
            } else {
                //error handling
            }
        }
    }

    /* Happens 2 more times in an identical fashion
     * for view files and 'after' templates 
     */

}

我已经用像这样简单的文件测试了它:

head.phtml:

<!DOCTYPE html>
<html lang="en">
<head>

</head>
<body>

header.phtml:

<div class="header">
    <div class="container">
        <div class="menu nav">
            <span class="menu-pre"></span>
            <ul>
                <li><a href=""><span>Item 1</span></a></li>
                <li><a href="#"><span>Dropdown</span></a>
                    <ul>
                        <li><a href=""><span>Item 2</span></a></li>
                        <li><a href=""><span>Item 3</span></a></li>
                    </ul>
                </li>
                <li><a href=""><span>Item 4</span></a></li>
            </ul>
            <span class="menu-post"></span>
        </div>
    </div>
</div>
<div class="container">

然后是标准页脚等...

问题来自在某处插入的随机空间,导致页面顶部出现空白:

The gap

在元素检查器中显示如下:

The gap in element inspector

我已经在多个浏览器中尝试过这个,但没有成功,我重置了 CSS,并且检查器没有显示多余的填充或边距,只是......出于某种原因的差距。

奇怪的是,如果我在 head.phtml 中包含 header.phtml 的内容,即我手动将 header.phtml 的内容放入 head 中。 phtml 文件,则间隙不会出现在输出中。

任何情况下, View 源的输出看起来完全相同,一个字节接一个字节。

我尝试过的事情:

  • 各种 CSS 重置方式。
  • 包括 <body> header.phtml 中的标记(似乎没有解决任何问题...??)
  • 代码通过html5验证
  • 包装 ob_start() 中的包含和 ob_end_flush()
  • 检查包含的每个文件(在 PHP 中为 using get_included_files())以检查是否有任何输出 - 所有文件都正确打开(没有关闭的 PHP 标记)并且在打开前没有恶意空格 <?php文件。

老实说......我想不出是什么导致了这个问题......是 PHP 输出缓冲还是什么?

最佳答案

检查每个 .php 文件。 <?php 之前不能有任何单行.另外,如果你的 php 代码是文件中的最后一件事,那么删除 ?> .另外,请确保 ?> .. <?php 之间没有空行标记并且 .html 中没有空行文件。

烦人的问题,几年前我遇到过。现在我从不在 php 文件中使用 html,总是输入 <?php在第一行永远不要输入 ?>.php 的末尾文件和问题消失了:)

关于PHP在顺序包含文件时插入奇怪的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27389505/

相关文章:

php - vuejs 在点击它时隐藏模态

css - 更改 Ionic 输入文本区域中的字体大小

javascript - 插入 HTML 或附加 Child onClick,并从上一个单击的元素中删除

javascript - 如何正确居中手持台

php - 使用 PHP 对表格内的特定 TD 进行背景着色

php - Ajax 返回 null

php - 苹果推送通知 - PHP

javascript - mysqli 直接运行时有效,但通过 js-ajax 运行时无效

html - Kindle Fire 丝绸浏览器阅读 View CSS

javascript - 即时创建可拖动