我在视图中使用此功能来定位各种内容块。
function block(&$block = false) {
if ($block === false) return ob_end_clean();
return ob_start(function($buffer) use (&$block) { $block = $buffer; });
}
直到今天我才一直遇到问题。我的街区没有出现在这个特定的项目上。
开发环境:使用Suhosin-Patch(cli)的PHP 5.3.3-7 + squeeze17(块显示)
脚本失败的生产环境(静默):PHP 5.4.4-14 + deb7u5(cli)(块不显示)
PHP日志没有显示任何内容。
你能帮我找一下发生的事吗?
修改
关于我如何使用此功能的更多信息。
说我有基本视图page.php
<h1><?= $title ?></h1>
<div class="content">
<?= $content ?>
</div>
<?php block($scripts) ?>
<script>
// javascript here
</script>
<?php block() ?>
然后在我的布局文件html.php
<html>
<head></head>
<body>
...
<?php if (isset($scripts)) print $scripts ?>
</body>
</html>
EDIT2:
我将这个课用于我的观点。
class view
{
public static $globals;
public function __construct($file, $layout = null) {
$this->file = $file;
if ($layout !== null) $this->layout = $layout;
}
public function __toString() {
extract((array)self::$globals);
extract((array)$this);
start:
ob_start();
include PATH_VIEWS . $file;
if (!isset($layout)) return ob_get_clean();
$view = ob_get_clean();
$file = $layout;
unset($layout);
goto start;
}
}
die(new view('page.php', 'html.php');
答案 0 :(得分:2)
ob_end_clean()
仅返回最顶层的输出缓冲区。如果prod和dev对output_buffer(http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering)有不同的设置,你会看到不同的结果。您可以使用phpinfo()
由于你的output_buffer选项匹配,你是否可以将include
更改为require
,以防万一导致路径混乱的服务器之间存在一些路径差异。