У меня есть PHP-код, хранящийся в базе данных, мне нужно выполнить его при извлечении.
Но мой код представляет собой сочетание HTML и PHP, в основном используемых в echo "";
Образец, который выглядит как мой код:
echo "Some Text " . $var['something'] . " more text " . $anotherVar['something2'];
Как я могу выполнить код, например, либо, если я добавлю данные в БД с помощью echo"";
или без него.
Есть идеи?
ОБНОВИТЬ:
Я забыл упомянуть, я использую это на веб-сайте, который будет использоваться в интрасети, и безопасность будет обеспечиваться на сервере для обеспечения безопасности данных.
У меня есть PHP-код, хранящийся в базе данных
Остановить сейчас.
Извлеките код из базы данных.
И никогда не смешивайте свой код с данными снова.
Это не только плохая идея, но и приглашение к нескольким типам попыток взлома .
Вы можете делать с eval()
. но никогда не использовать его. eval()
очень опасен, поскольку позволяет выполнять произвольный PHP-код. Поэтому его использование не рекомендуется. Если вы тщательно проверили, что нет другого выбора, кроме использования этой конструкции, обратите особое внимание на то, чтобы не передавать какие-либо данные, предоставленные пользователем, без предварительной проверки.
См. Eval . Он позволяет передавать строку, содержащую PHP, и запускать ее так, как если бы вы написали ее непосредственно в свой файл.
Это не обычная практика хранения исполняемого PHP в базе данных; действительно ли тот код, который вы храните в действительности, отличается тем, что имеет смысл хранить много копий, а не адаптировать его к тому, чтобы делать то же самое со статическими данными в базе данных? Использование eval
часто считается плохой практикой, так как это может привести к проблемам с обслуживанием, если есть способ избежать этого, это обычно стоит того.
Вы можете выполнить код с помощью eval ():
$code_str = "echo 'Im executed'"; eval($code_str );
НО ОПЛАТИТЕ ВНИМАНИЕ, что это небезопасно: если кто-то получит доступ к вашей базе данных, он сможет выполнить любой код на вашем сервере
используйте функцию eval ().
heres some info
http://www.php.net/manual/en/function.eval.php
что-то вроде:
eval($yourcode);
Если это последнее средство, вы хотите, чтобы оно было безопасным, поскольку оно будет оценивать что угодно, и хакеры любят это. Посмотрите на Сухозин или другие пути, чтобы обеспечить это в производстве.
Поскольку все указали, используя eval (), это плохой подход для ваших нужд. Но вы можете получить почти такой же результат, используя белый список.
// $ sql_fn_parameters [0] = имя функции
// $ sql_fn_parameters [1,2,3 …..] = параметры функции
Затем определите функции, которые включают ваш php-код blocks.for instance
my_echo($sql_fn_parameters){ echo $sql_fn_parameters[1];//numbered or assoc.. }
затем вытащите данные, содержащие имя функции
function_exists("$sql_fn_parameters[0]")
call_user_func_array () или call_user_func () (любой из вас может также фильтровать массив параметров $ sql_sourced_parameters_array не содержит каких-либо рискованных синтаксисов для большей безопасности).
И ваш код управляется из db без риска.
кажется немного длинным, но после реализации это действительно радость использовать поток php, управляемый администратором.
НО создание такой структуры с ООП лучше в долгосрочной перспективе. (Автозагрузка классов и т. Д.)
Очевидно, Eval небезопасен.
Лучший маршрут ИМО
Сохранение данных в таблице
Запуск хранимой процедуры, когда вы готовы захватить и обработать эти данные
Таким образом, вы не должны злоупотреблять базой данных. И вообще, динамическое выполнение кода – плохая идея. Вы можете использовать более элегантное решение этой проблемы, используя шаблонные механизмы, такие как Smarty или XSLT .