使用preg_replace修改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内容(作为字符串):

<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();