php 缓冲 ​​ob_start:同步替代

php buffering with ob_start: synchronous alternative

Hy 社区

我在使用 php 时遇到了一些问题,找不到解决方案。我目前正在开发一个 wordpress 插件,我想做的是操纵一些内容。使用 php 缓冲 ​​(ob_start) 效果很好,但给我带来了一些新的麻烦。我正在做的是以下(最小化)。

假设我的网页包含以下文本:

Hy there, my name is A B, I am living in C with my dog D

php 代码的作用:用子函数的输出替换一组字符串。当然,这只是一个最小的例子。

<?php
// -----------------------------------------
// The Function loading some content from a php file
function my_function() {
    ob_start();
    require_once("some_file.php");
    $content = ob_get_contents();
    ob_end_clean();
    return($content); // Returns new content
}
// -----------------------------------------

// Content of the web page
$content = "Hy there, my name is A B, I am living in C with my dog D";

// Strings to replace (by the content returned by "my_function")
$matches = array("A","B","C","D");

// Looping over the different matches
foreach ( $matches as $match ) {

    // Calling my_function in buffer mode
    $content = str_replace($match,call_user_func("my_function"),$content);


} ?>

好吧,现在发生的情况是缓冲按照定义是异步的。一旦第一个 my_function 调用完成,整个缓冲区将被清理并且“A”不会被替换为“A”应该替换的内容,但还包含部分内容“B”应替换为 :)。如果只有一件事要替换,那效果很好(只有一个 ob_start 过程)。

是否有任何其他方法可以捕获 include 或 require 调用的输出,或者以同步方式捕获 运行 ob_*?也许会有更好的方法我还没有找到。得到提示会很棒 :)。

提前致谢!也许我完全走错了路,但这就是学习的方式:)。

复活节快乐, 雷托

因为你使用require_once。 但是 require_once 文件包含 ONCE! 您可以对多个包含使用 require 或 include。 但这是不好的方法。糟糕的架构。