我使用ob_get_contents()
作为核心方法创建自己的模板脚本。通过使用它,它可以渲染其他文件,从单个文件调用。
就像我们假设我们有4个文件一样:
index.php
将调用并呈现其他文件的内容(此处为2个html文件)。使用以下代码:
//index.php
function render($file) {
if (file_exists($file)) {
ob_start();
include($file);
$content = ob_get_contents();
ob_end_clean();
return $content;
}
}
echo render('header.html');
echo render('footer.html');
但是(例如)当header.html
包含调用include('functions.php')
时,包含的文件(functions.php)无法在footer.html
中再次使用。我的意思是,我必须在footer.html
再次制作一个包含。所以在这里,行include('functions.php')
必须包含在两个文件中。
如何在没有从子文件中再次调用文件的情况下include()
文件?
答案 0 :(得分:1)
当您使用ob_start()
(输出缓冲)时,您最终只得到文件的输出,这意味着执行的文件输出由ob_get_content()
返回。由于只返回输出,其他文件不知道包含。
所以答案是:你不能用输出缓冲来做。或者使用include
ob_start之前include_once
您的文件。
答案 1 :(得分:1)
这可能会像这样:
//index.php
function render($file) {
if(!isset($GLOBALS['included'])) {
$GLOBALS['included'] = array();
}
if (!in_array($file, $GLOBALS['included']) && file_exists($file)) {
ob_start();
include($file);
$content = ob_get_contents();
ob_end_clean();
$GLOBALS['included'][] = $file;
return $content;
}
}
echo render('header.html');
echo render('footer.html');
或者您可以使用include_once(include_once $file;
),PHP会为您完成。
虽然我建议您确保文件加载结构的形状使得这些事件永远不会发生。