Как кешировать код в PHP? - PullRequest
1 голос
/ 06 марта 2011

Я создаю систему создания пользовательских форм, которая включает в себя различные токены.Эти токены находятся с помощью регулярных выражений и в зависимости от типа анализируемого токена.Некоторые требуют простой замены, некоторые требуют циклов и т. Д.

Теперь я знаю, что 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 в уже проанализированный, чтобудет генерировать вывод.

Ответы [ 3 ]

2 голосов
/ 06 марта 2011

Вы просто генерируете включенный файл, сохраняете его в недоступной для общественности папке и включаете в функцию PHP с помощью include ($ filename);

Пример кода:

    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)

UPDATE: это примерно метод, используемый Wordpress, CodeIgniter и другими средами для загрузки шаблонов на основе PHP.

1 голос
/ 06 марта 2011

Лучше всего было бы просто сгенерировать файл PHP и сохранить его.Т.е.,

$replacement = 'foobar';

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

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

Просто будьте очень осторожны при динамическом генерировании файлов PHP, так как вы не хотите, чтобы пользователи могли манипулировать данными для включения чего-либо вредоносного.

Затем в вашем процессепросто проверьте, существует ли файл, запустите его, в противном случае создайте файл.

1 голос
/ 06 марта 2011

Я не уверен, что понял вашу проблему, но вы пытались использовать APC ?

С помощью APC вы можете кэшировать переменные, поэтому, если вы выводите определенную переменную, вы можете получить ее из кэша.

Вы делаете все свои вычисления, сохраняете информацию в некоторых переменных и сохраняете эти переменные в кеше. Затем в следующий раз вы просто получите эту информацию из кэша.

Это действительно легко использовать APC . Вам просто нужно позвонить apc_fetch($key), чтобы получить, и apc_store($key, $value, $howLongYouWant2Cache), чтобы сохранить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...