PHP-код в БД отстой, но я уже бывал в ситуациях, когда это нужно было делать, потому что мой работодатель не позволял мне переписывать систему таким образом, чтобы этого избежать, поэтому вот общая версия Решение, которое мы использовали:
$string = 'this <?php echo "is not"; ?> cool';
function exec_php($php_string) {
return preg_replace_callback(
'/<\?(?:php)?(.*)\?>/m',
'exec_php_embed',
$string
);
}
function exec_php_embed(array $args) {
if (count($args) != 2) {
return '';
}
list(,$code) = $args;
ob_start();
eval($code);
return ob_get_clean();
}
Примечание: БУДЬТЕ ОЧЕНЬ ОЧЕНЬ ОСТОРОЖНЫ! НЕ НЕ ИСПОЛЬЗУЕМЫЙ ПОЛЬЗОВАТЕЛЬСКИЙ КОНТЕНТ С ЭТИМ! Попробуйте заменить это как можно скорее!
Использование eval()
не просто неэффективно, но и опасно, даже если используется ненадлежащим образом. Хотя я очень не рекомендую использовать подобные вещи, я полагаю, что это окажется решением вашей непосредственной проблемы. Я не гарантирую, что это не создаст больше собственных проблем;)
Как говорит GNU:
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.