假设我有一个包含文件 foo.php,它包含文本“这个文件是 foo”。
因此,当我使用 加载包含时<?php include 'foo.php'; ?>
,我希望能够在显示包含的文本之前替换包含中的字符串。
所以假设我想用“cool”替换包含中的“foo”。
说得通?
你可以使用这个:
<?php
function callback($buffer)
{
return (str_replace("foo", "cool", $buffer));
}
ob_start("callback");
include 'foo.php';
ob_end_flush();
?>
您可以使用以下功能来做到这一点:
$content=includeFileContent('test.php');
echo str_replace('foo', 'cool', $content);
function includeFileContent($fileName)
{
ob_start();
ob_implicit_flush(false);
include($fileName);
return ob_get_clean();
}
基本思想是好的,使用的实现实践不是。包含用于将文件作为一个整体加载到内存中。当您不想更改包含文件上的任何内容时,您应该只使用 'include ...'。使用包含,您可以将文件加载到内存中并打算使用它来处理接下来的任何内容。
动态包含的一个经典示例是模板文件。include_once 的一个经典示例是具有基本功能的文件。
顺便说一句,我更喜欢 require_once 而不是 include_once。
如果要在显示之前更改文件的内容,则应在另一个函数中加载文件的内容并在显示之前替换其内容。执行内容更改的函数应该在您包含的文件中(_once)。应该使用某种类型的文件处理程序加载应该替换其内容的文件。因为您想替换文本,我建议使用 file_get_contents()。
<?php
include 'foo.php';
$output = file_get_contents('bar.php');
$output = processContent($output);
?>
foo.php 示例:
<?php
function processContent($pText){
return str_replace('foo','cool',$pText);
}
?>
使用这种技术可以帮助您将语义与实际输出分开,并且可以成为在运行时返回个性化消息的好技术。