2011-03-06 104 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文件時,你不想讓用戶操作數據,包括任何惡意。

然後,在您的過程中,只需檢查文件是否存在,如此,運行它,否則,生成文件。