我正在创建一个自定义表单构建系统,其中包含各种令牌。使用正则表达式找到这些标记,并根据toke的类型进行解析。有些需要简单的替换,有些需要循环,等等。
现在我知道,RegExp非常耗费资源和时间,因此我希望能够解析一次表单的代码,创建一个php代码,然后保存PHP代码,以供下次使用。我该怎么做呢?
到目前为止,我只看到了输出缓存。有没有办法缓存像echo
这样的命令和像foreach()
这样的循环?
由于误解,我将创建一个例子。
未分析的模板数据:
Thank You for Your interest, [*Title*] [*Firstname*] [*Lastname*]. Here are the details of Your order!
[*KeyValuePairs*]
Here is the link to Your request: [*LinkToRequest*].
解析模板:
"Thank You for Your interest, <?php echo $data->title;?> <?php echo $data->firstname;?> <?php echo $data->lastname;?>. Here are the details of Your order!
<?php foreach($data->values as $key=>$value){
echo $key."-".$value
}?>
Here is the link to Your request: <?php echo $data->linkToRequest;?>.
然后我会保存解析后的模板,而不是每次解析模板,只需将$data
变量传递给已经解析的变量,这将生成输出。
答案 0 :(得分:2)
您只需生成包含的文件,将其保存在不可公开访问的文件夹中,并使用include($ filename)包含在PHP函数内;
代码示例:
function render( $___template, $___data_array = array() )
{
ob_start();
extract( $___data_array );
include ( $___template);
$output = ob_get_clean();
echo $output;
}
$data = array('Title' => 'My title', 'FirstName' => 'John');
render('templates/mytemplate.php', $data);
注意关键点是使用extract(http://php.net/extract)来扩展真实变量中的数组内容。
(在函数$ ___ data ['FirstName']范围内变为$ FirstName)
更新:这大致是Wordpress,CodeIgniter和其他框架用来加载基于PHP的模板的方法。
答案 1 :(得分:1)
我不确定是否了解您的问题,但您是否尝试使用APC?
使用APC,您可以缓存变量,因此如果您回显特定变量,您可以从缓存中获取它。
您执行所有计算,将信息保存在某些变量中,并将这些变量保存在缓存中。然后,下次你从缓存中获取该信息。
使用APC非常简单。您只需致电apc_fetch($key)
进行提取,然后apc_store($key, $value, $howLongYouWant2Cache)
进行保存即可。
答案 2 :(得分:1)
最好的办法就是简单地生成一个PHP文件并保存。即,
$replacement = 'foobar';
$phpCodeTemplate = "<?php echo '$replacement'; ?>";
file_put_contents('some_unique_file_name.php', $phpCodeTemplate);
动态生成PHP文件时要非常小心,因为您不希望允许用户操纵数据以包含任何恶意内容。
然后,在您的过程中,只需检查文件是否存在,是这样,运行它,否则生成文件。