Hy社区
我遇到一些麻烦,无法找到解决方案。我目前正在开发一个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);
} ?>
嗯,现在发生的事情是缓冲是根据定义async。第一个my_function
调用完成后,整个缓冲区将被清除,“A
”不会替换为“A
”应被替换,但也包含部分内容“B
”应该替换为:)。如果只有一件事要替换,那就非常好(只有一个ob_start
过程)。
有没有其他方法来捕获include或require调用的输出,或以同步方式运行ob_*
?也许有一种更好的方式我没有找到。得到一个暗示会很棒:)。
提前致谢!也许我完全走错了路,但这就是学习的方法:)。
复活节快乐, 雷托答案 0 :(得分:2)
因为你使用require_once。 但是对于require_once文件已包含 ONCE ! 您可以使用require或include for multiple。 但这是不好的方式。糟糕的建筑。