Предупреждение о взломе! Вы можете выполнить оценку PHP самостоятельно, применив немного хакерства, используя preg_replace_callback
для поиска и замены блоков PHP.
function evalCallback($matches)
{
// [0] = <?php return returnOrEcho("hi1");?>
// [1] = <?php
// [2] = return returnOrEcho("hi1");
// [3] = ?>
return eval($matches[2]);
}
function evalPhp($file)
{
// Load contents
$contents = file_get_contents($file);
// Add returns
$content_with_returns = str_replace(
"returnOrEcho"
,"return returnOrEcho"
,$contents);
// eval
$modified_content = preg_replace_callback(
array("|(\<\?php)(.*)(\?\>)|"
,"evalCallback"
,$content_with_returns);
return $modified_content;
}
Вам нужно будет изменить файл PHP, который вы включаете, чтобы использовать функцию returnOrEcho
, чтобы ее можно было перегрузить для этого случая и обычного случая. В этом случае вы хотите return
, чтобы eval
забрал его так, как вы хотите, но нормальный случай - echo
без возврата.
Итак, для этого случая вы должны определить:
function returnOrEcho($str)
{
return $str;
}
и для нормального случая вы бы определили:
function returnOrEcho($str)
{
echo $str;
}
В вашем включенном файле PHP (или файле просмотра) у вас будет что-то вроде этого:
<?php returnOrEcho("hi1");?>
<?php returnOrEcho("hi3"."oo");?>
<?php returnOrEcho(6*7);?>
Мне не удалось заставить работать встроенный обратный вызов preg_replace_callback
, поэтому я использовал отдельную функцию, но есть пример того, как это сделать: preg_replace_callback() — обратный вызов внутри текущего экземпляра объекта.
person
David Newcomb
schedule
30.10.2014