我有一个像这样的文件
**buffer.php**
ob_start();
<h1>Welcome</h1>
{replace_me_with_working_php_include}
<h2>I got a problem..</h2>
ob_end_flush();
缓冲区内的所有内容都是使用数据库中的数据动态生成的。 将php插入数据库不是一种选择。
问题是,我得到了输出缓冲区,我想替换&#39; {replace}&#39;与一个工作的PHP包含,其中包括一个文件,也有一些HTML / PHP。
所以我的实际问题是:如何在输出缓冲区中使用工作的php代码替换字符串?
我希望你能提供帮助,已经习惯了很多时间。
致敬 - user2453885
编辑 - 2014年11月25日
我知道wordpress或joomla正在使用一些类似的功能,你可以在你的帖子中写{rate},并用评级系统(一些rate-plugin)取而代之。这是我所希望的秘密知识。
答案 0 :(得分:0)
您可以使用preg_replace_callback并让回调包含您要包含的文件并返回输出。或者你可以用文本包含替换占位符,将其保存为文件并包含该文件(编译事物)
答案 1 :(得分:0)
对于简单的文本,你可能会爆炸(虽然它对于大块文本可能不是最有效的):
function StringSwap($text ="", $rootdir ="", $begin = "{", $end = "}") {
// Explode beginning
$go = explode($begin,$text);
// Loop through the array
if(is_array($go)) {
foreach($go as $value) {
// Split ends if available
$value = explode($end,$value);
// If there is an end, key 0 should be the replacement
if(count($value) > 1) {
// Check if the file exists based on your root
if(is_file($rootdir . $value[0])) {
// If it is a real file, mark it and remove it
$new[]['file'] = $rootdir . $value[0];
unset($value[0]);
}
// All others set as text
$new[]['txt'] = implode($value);
}
else
// If not an array, not a file, just assign as text
$new[]['txt'] = $value;
}
}
// Loop through new array and handle each block as text or include
foreach($new as $block) {
if(isset($block['txt'])) {
echo (is_array($block['txt']))? implode(" ",$block['txt']): $block['txt']." ";
}
elseif(isset($block['file'])) {
include_once($block['file']);
}
}
}
// To use, drop your text in here as a string
// You need to set a root directory so it can map properly
StringSwap($text);
答案 2 :(得分:0)
我可能在这里误解了一些东西,但像这样简单的东西可能有用吗?
<?php
# Main page (retrieved from the database or wherever into a variable - output buffer example shown)
ob_start();
<h1>Welcome</h1>
{replace_me_with_working_php_include}
<h2>I got a problem..</h2>
$main = ob_get_clean();
# Replacement
ob_start();
include 'whatever.php';
$replacement = ob_get_clean();
echo str_replace('{replace_me_with_working_php_include}', $replacement, $main);
如果您希望从该任务中删除输出缓冲区,也可以在include文件中使用return语句。
祝你好运!答案 3 :(得分:0)
所有的一些可爱的输入。
我会尽可能清楚地回答我自己的问题。
问题:我首先想到的是我想实现一个php函数或包含在缓冲区中。然而,这不是我想要的,也不是我想要的。
解决方案:具有所需内容的回调功能。通过使用函数preg_replace_callback(),我可以在缓冲区中找到我想要替换的文本,然后将其替换为回调(函数)将返回的内容。
然后回调包含必要的文件/ .classes并使用带有书面内容的函数。
如果你不理解,或者想详细说明/告诉我有关我的解决方案,请告诉我。