【发布时间】:2014-12-09 21:50:28
【问题描述】:
我正在编写一个包含由配置文件定义的 template.phtml 文件的应用程序,该函数看起来类似于:
查看.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">
然后是标准页脚等...
问题来自在某处插入的随机空间,导致页面顶部出现间隙:
在元素检查器中显示以下内容:
我已经在多个浏览器中尝试过,但并不满意,我重置了 CSS,检查器没有显示多余的填充或边距,只是……由于某种原因出现了间隙。
奇怪的是,如果我在 head.phtml 中包含 header.phtml 的内容,即我手动将 header.phtml 的内容放入 head 中。 phtml 文件,则间隙不会出现在输出中。
在任何种情况下,来自视图源的输出看起来完全相同相同,逐个字节。
我尝试过的事情:
- 各种方式的 CSS 重置。
- 在 header.phtml 中包含
<body>标记(似乎没有解决任何问题...??) - 代码通过html5验证
- 将包含在
ob_start()和ob_end_flush()中 - 检查包含的每个文件(PHP 中的
using get_included_files())以检查输出的任何内容 - 所有文件在打开<?php文件之前都正确打开(没有关闭 PHP 标记)且没有恶意空格。
老实说...我想不出是什么导致了这个问题...是 PHP 输出缓冲还是什么?
【问题讨论】: