Я полагаю, что вы захотите выполнить оператор включения через eval()
. Однако обратите внимание, что:
"Языковая конструкция eval () очень опасна, поскольку она позволяет выполнять произвольный код PHP. Поэтому его использование не рекомендуется. Если вы тщательно убедились, что нет другого выбора, кроме как использовать эту конструкцию, обратите особое внимание на то, чтобы передавать любые предоставленные пользователем данные без предварительной проверки. " (PHP.net)
ИСТОЧНИК: http://php.net/manual/en/function.eval.php
Вы можете попробовать следующее:
<?php
function spin($var)
{
$words = explode("\{",$var);
foreach ($words as $word)
{
$words = explode("}",$word);
foreach ($words as $word)
{
$words = explode("|",$word);
$word = $words[array_rand($words, 1)];
if ( preg_match( "/\<\? include\(\\\"([A-Za-z\.]+)\\\"\)\;\?\>/", $word ) )
{
$file = preg_replace( "/^.*\<\? include\(\\\"([A-Za-z\.]+)\\\"\)\;\?\>.*\$/", "\$1", $word );
$pre = preg_replace( "/^(.*)\<\? include\(\\\"[A-Za-z\.]+\\\"\)\;\?\>.*\$/", "\$1", $word );
$post = preg_replace( "/^.*\<\? include\(\\\"[A-Za-z\.]+\\\"\)\;\?\>(.*)\$/", "\$1", $word );
echo $pre;
include( $file );
echo $post;
}
}
}
}
$text = "example.com is {the best forum|a <? include(\"myfile.php\");?>Forum|a wonderful Forum|a perfect Forum} {123|some other sting}";
spin($text);
?>