使用preg_replace修改HTML和PHP
我有这个HTML/PHP内容(作为字符串):使用preg_replace修改HTML和PHP,php,regex,include,preg-replace,eval,Php,Regex,Include,Preg Replace,Eval,我有这个HTML/PHP内容(作为字符串): <html> <?php my_class->my_function('test.php', 'value1', 'value2'); <?php my_class->my_function('test2.php', 3); </html> 应该输出my_函数的结果,而不是函数调用 结果应为 <html> <?php /* Content fr
<html>
<?php my_class->my_function('test.php', 'value1', 'value2');
<?php my_class->my_function('test2.php', 3);
</html>
应该输出my_函数的结果,而不是函数调用
结果应为
<html>
<?php
/* Content from file test.php */
echo 'This file is test.php, with value1 and value2';
?>
<?php
/* Content from file test2.php */
echo 'This file is test2.php, with value 3';
?>
</html>
我想我需要某种preg\u replace与eval相结合,包括或获取文件内容。不完整答案。这是我第一次使用explode时得到的。它可以工作,但在向函数添加多个值时会产生错误。它可以处理一个或两个值。不多了,这对我来说太复杂了
function include_layout2($part, $file = '/index.php')
{
$url = get_layout2($part, $file);
if(file_exists($url))
{
return get_include_contents( $url );
}
}
function get_layout2($part, $file = '/index.php')
{
$layout_theme = 'default';
$addmod_layout = get_option('addmod_layout');
$layout = $addmod_layout['styles'][$layout_theme][$part]['layout'];
$layout = (!empty($layout)) ? $layout : 'default';
$url = TEMPLATEPATH . '/styles/' . $part . '/' . $layout . $file;
if(file_exists($url))
{
return $url;
}
}
function generate_content($layout = 'index')
{
$content = include_layout2($layout);
$content_a = explode("<?php addmod_include('", $content);
$save_for_later = $content;
$counter = 0;
while(count($content_a) > 1)
{
$content_a = explode("<?php addmod_include('", $save_for_later);
$output = '';
$save_for_later = '';
for($i = 0; $i < sizeof($content_a); $i++)
{
$content_b = explode("'); ?>", $content_a[$i], 2);
if(isset($content_b[0]) && !empty($content_b[0]))
{
$include_test = include_layout2($content_b[0]);
if(isset($include_test))
{
$content_b[0] = include_layout2($content_b[0]);
}
else
{
$new_layout = explode("addmod_include('", $content_b[0]);
$new_file = explode("addmod_include(', '", $content_b[0]);
if(isset($new_layout[0]) && isset($new_file[1]))
{
$content_b[0] = include_layout2($new_layout[0], $new_file[1]);
}
else
{
$content_b[0] .= "'); ?>";
}
}
}
$content = implode($content_b);
$output .= $content;
$save_for_later .= $content;
}
$counter++;
}
return $output;
}
echo generate_content();
函数include\u layout2($part,$file='/index.php'))
{
$url=get\u layout2($part,$file);
如果(文件_存在($url))
{
返回get\u include\u内容($url);
}
}
函数get_layout2($part,$file='/index.php')
{
$layout_theme='default';
$addmod_layout=get_选项('addmod_layout');
$layout=$addmod_布局['style'][$layout_主题][$part]['layout'];
$layout=(!empty($layout))?$layout:'default';
$url=TEMPLATEPATH.'/styles/'.$part.'/'.$layout.$file;
如果(文件_存在($url))
{
返回$url;
}
}
函数生成内容($layout='index')
{
$content=包含布局2($layout);
$content\u a=爆炸("这听起来好像你有问题,你已经决定用上述方法解决这个问题。不管问题是什么,都有更好的方法。解释问题,而不是你提出的不起作用的解决方案。因为我对你试图做的事情感到困惑。这比你的更困惑。请解释为什么你不只是在执行第一个脚本吗?这是一个模板吗?任何包含
eval()
函数的解决方案都可能是个坏主意。几乎总是有更好的解决方案。我有一个使用不同文件和文件夹的系统。在我的“观点”中免费版本我只想分发生成的文件,而不是我的整个系统。那么你所需要的就是eval(“?>”。generate_content());
而不是echo generate_content()
,对吗?不,它在没有eval的情况下工作,因为我使用get_file_内容,内容是PHP。但是问题是解析的内容。Explode让我感到困惑。
function include_layout2($part, $file = '/index.php')
{
$url = get_layout2($part, $file);
if(file_exists($url))
{
return get_include_contents( $url );
}
}
function get_layout2($part, $file = '/index.php')
{
$layout_theme = 'default';
$addmod_layout = get_option('addmod_layout');
$layout = $addmod_layout['styles'][$layout_theme][$part]['layout'];
$layout = (!empty($layout)) ? $layout : 'default';
$url = TEMPLATEPATH . '/styles/' . $part . '/' . $layout . $file;
if(file_exists($url))
{
return $url;
}
}
function generate_content($layout = 'index')
{
$content = include_layout2($layout);
$content_a = explode("<?php addmod_include('", $content);
$save_for_later = $content;
$counter = 0;
while(count($content_a) > 1)
{
$content_a = explode("<?php addmod_include('", $save_for_later);
$output = '';
$save_for_later = '';
for($i = 0; $i < sizeof($content_a); $i++)
{
$content_b = explode("'); ?>", $content_a[$i], 2);
if(isset($content_b[0]) && !empty($content_b[0]))
{
$include_test = include_layout2($content_b[0]);
if(isset($include_test))
{
$content_b[0] = include_layout2($content_b[0]);
}
else
{
$new_layout = explode("addmod_include('", $content_b[0]);
$new_file = explode("addmod_include(', '", $content_b[0]);
if(isset($new_layout[0]) && isset($new_file[1]))
{
$content_b[0] = include_layout2($new_layout[0], $new_file[1]);
}
else
{
$content_b[0] .= "'); ?>";
}
}
}
$content = implode($content_b);
$output .= $content;
$save_for_later .= $content;
}
$counter++;
}
return $output;
}
echo generate_content();