Hack-Alarm! Sie könnten die Auswertung des PHP selbst mit ein wenig Hacker machen, indem Sie preg_replace_callback
verwenden, um die PHP-Blöcke zu suchen und zu ersetzen.
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;
}
Sie würden die PHP-Datei ändern müssen Sie eine returnOrEcho
Funktion zu verwenden, einschließlich, so dass es für diesen Fall und der Normalfall überlastet werden kann. In diesem Fall möchten Sie return
, so dass es von der eval
in der Art, wie Sie wollen, abgeholt werden, aber der Normalfall ist echo
ohne eine Rückkehr. Also für diesen Fall
würden Sie definieren:
function returnOrEcho($str)
{
return $str;
}
und für den Normalfall würden Sie definieren:
function returnOrEcho($str)
{
echo $str;
}
In Ihrem enthalten PHP-Datei (oder View-Datei), die Sie würde so etwas wie dies:
<?php returnOrEcho("hi1");?>
<?php returnOrEcho("hi3"."oo");?>
<?php returnOrEcho(6*7);?>
konnte ich nicht preg_replace_callback
Inline-Rückruf Arbeits so habe ich eine separate Funktion, aber es gibt ein Beispiel, wie es geht: preg_replace_callback() - Calback inside current object instance.
Warum nicht einfach die Ausgabepufferung verwenden? – Greg