2011-03-06 35 views
1

我正在创建一个包含各种令牌的自定义表单构建系统。这些令牌是使用正则表达式找到的,并且根据toke的类型进行解析。有些需要简单的更换,有些需要周期,等等。如何在PHP中缓存代码?

现在我知道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变量传递给已解析一个,这会生成一个输出。

回答

2

您只需生成包含的文件,将其保存在非公开可访问的文件夹中,并且您可以使用include($ filename)包含在PHP函数中;

A码例如:

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

注意的关键点是使用提取物(http://php.net/extract)扩大在真实瓦尔数组内容。

(功能$ ___数据[“姓”]的范围内变$姓)

UPDATE:这是,粗略地由WordPress,笨等框架所使用的方法来加载基于他们的PHP的模板。

+0

感谢您的编辑,@thephpdeveloper :-) – tacone 2011-03-07 01:34:18

1

我不确定是否了解您的问题,但您是否尝试过使用APC

使用APC,您可以缓存变量,因此如果您回显特定变量,则可以从缓存中获取该变量。

你做所有的计算,将信息保存在一些变量中,并将这些变量保存在缓存中。然后,下一次您只需从缓存中获取该信息。

它真的很容易使用APC。您只需拨打apc_fetch($key)即可取,而apc_store($key, $value, $howLongYouWant2Cache)即可保存。

1

你最好打赌会简单地生成一个PHP文件并保存它。即,

$replacement = 'foobar'; 

$phpCodeTemplate = "<?php echo '$replacement'; ?>"; 

file_put_contents('some_unique_file_name.php', $phpCodeTemplate); 

只是要非常小心,动态地生成PHP文件时,你不想让用户操作数据,包括任何恶意。

然后,在您的过程中,只需检查文件是否存在,如此,运行它,否则,生成文件。