8

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

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

所以假设我想用“cool”替换包含中的“foo”。

说得通?

4

3 回答 3

8

你可以使用这个:

<?php

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

?> 
于 2013-08-28T12:26:06.940 回答
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();
}
于 2013-08-28T12:33:17.247 回答
3

基本思想是好的,使用的实现实践不是。包含用于将文件作为一个整体加载到内存中。当您不想更改包含文件上的任何内容时,您应该只使用 '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);
  }
?>

使用这种技术可以帮助您将语义与实际输出分开,并且可以成为在运行时返回个性化消息的好技术。

于 2013-09-23T09:28:42.997 回答