【发布时间】:2020-05-07 21:48:59
【问题描述】:
有没有办法在文件实际输出前后自动包含内容?
为什么?例如,使用它来包含直到主要内容的所有内容(动态生成的 HTML、head、打开标签...),并且在文件运行后,再次自动关闭所有内容。
我知道ob_start 方法,但我不确定动态生成的内容是否容易以这种方式包含:
<?php
function bootstrap_page($content) {
return "text before" . $content . "text after";
}
ob_start(bootstrap_page);
?>
但是,ob 不能用于捕获回调中包含的输出,AFAIK。因此,很难轻松地预先和附加动态生成的内容。我可以在回调函数中使用长字符串来获得静态版本的工作 - 但有没有办法更无缝地做到这一点?
换句话说,我基本上试图在我需要的任何(其他)文件之前和之后包含一个 php 文件,并且如果可能的话,减少到给定文件开头的函数调用。
我正在寻找的功能会改变这个:
<?php
bootstrap_this();
?>
<p>Lorem ipsum</p>
before.php:
<!DOCTYPE html>
<html>
<?php include('head.php'); ?>
<body>
<?php if(somecondition) { ?>
<h1>Hello, World!</h1>
<?php } ?>
after.php:
</body>
</html>
变成这样:
<?php
include 'before.php';
?>
<p>Lorem ipsum</p>
<?php
include 'after.php';
?>
最后变成:
<!DOCTYPE html>
<html>
<?php include('head.php'); ?>
<body>
<?php if(somecondition) { ?>
<h1>Hello, World!</h1>
<?php } ?>
<p>Lorem ipsum</p>
</body>
</html>
【问题讨论】:
-
我已经添加了一个答案,但我不确定我是否得到它。
-
@bestprogrammerintheworld 感谢您的努力。是的,您似乎无法轻松地将输出夹在当前文件之外。这也必须从另一个文件运行。
-
@bestprogrammerintheworld 谢谢!我按照我的要求做了,但这使我的代码比以前更复杂,所以我可能仍然必须选择不自己编码选项并使用某种框架。 ;)
-
谢谢。我很高兴能帮助你......弄清楚你不应该自己编写代码;-)
-
@bestprogrammerintheworld 你可能已经给了我一个想法。我会尝试一下,也许我可以提供更新。
标签: php