PHP preg_replace - Как получить тот же результат без `/ e`` eval` - улучшена безопасность и скорость работы? - PullRequest
1 голос
/ 21 июля 2011

Как получить тот же результат без /e eval - улучшены показатели безопасности и скорости?

function finclude($file){
    return include($file);
}

$str = "Today is {include 'date.php'}.";
echo preg_replace("/\{include '(.*)\'}/e", 'finclude("$1")', $str);

date.php:

<?php return date('jS \of F'); ?>, 2011

Результат: Today is 20th of July.

Ответы [ 3 ]

2 голосов
/ 21 июля 2011

Вы можете использовать preg_replace_callback

echo preg_replace_callback("/\{include '(.*)\'}/", function($m) {
  return include($m[1]);
}, $str);
1 голос
/ 21 июля 2011

Вы можете использовать preg_replace_callback():

echo preg_replace_callback("/\{include '(.*)\'}/", function ($matches) {
    // TODO, here : some test on $matches[1], to make sure that including it is safe
    return include $matches[1];
}, $str);
0 голосов
/ 21 июля 2011
echo preg_replace_callback("/\{include '(.*)\'}/", function($matches){finclude($matches[1]);}, $str);
...