替换PHP包含文件中的字符串

8

假设我有一个包含文件foo.php,其包含文本“此文件是foo”。

因此,当我使用<?php include 'foo.php'; ?>加载包含时,我希望能够在显示它所包含的文本之前替换包含中的字符串。

例如,我想用“cool”替换包含中的“foo”。

明白了吗?


你为什么不使用 file_get_contents() 函数来读取纯文本文件呢? - Nev Stokes
你不能编辑这些文件吗? - Jason McCreary
3个回答

9
您可以使用这个:
<?php

function callback($buffer)
{
  return (str_replace("foo", "cool", $buffer));
}
ob_start("callback");
include 'foo.php';
ob_end_flush();

?> 

这太棒了。我正在为一个应用程序编写内部文档,并希望在<code></code>标签中包含一些后端文件,以供其他开发人员使用。(这是一个受密码保护的页面,我知道如果不小心显示一些代码可能会存在漏洞。) - Jason

4
您可以使用以下函数来实现这一功能:
$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();
}

3
基本思想是好的,但实现方式不佳。使用include将一个文件完整地加载到内存中。只有在不想更改所包含文件的任何内容时才应使用“include ...”。使用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);
  }
?>

使用这种技术可以将语义与实际输出分离,是在运行时返回个性化信息的一种好技术。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接