PHP eval проблема с PHP + HTML-код - PullRequest
2 голосов
/ 26 марта 2010

PHP и HTML-код хранятся в таблице базы данных. Когда я получаю эти данные, мне нужно отобразить HTML и обработать PHP. Я думал, что мог бы использовать eval() для этого, который работает, если я делаю это eval("echo 'dlsj'; ?> EVALED ");, я получаю распечатанный "dlsjEVALED".

Проблема в том, что я получаю фатальную ошибку при запуске более длинных скриптов. Вещи как:

Ошибка разбора: синтаксическая ошибка, неожиданный '<' в /home/content.php(18): eval () 'd код в строке 1 </p>

Ответы [ 5 ]

11 голосов
/ 06 июля 2010

в самый раз дер ...........

eval('?>' . $content .'<?php');
11 голосов
/ 26 марта 2010

Лучший совет - никогда не храните php и html-код в вашей базе данных. И избегайте eval (), как чума.

Я не могу точно сказать, что не так с вашим кодом, так как вы не предоставили достаточно информации. Но даже если бы у меня был какой-то совет, я не думаю, что мог бы дать его с чистой совестью.

Вам следует перепроектировать все приложение, чтобы оно не требовало хранения таких вещей в базе данных. Я не могу представить, почему это было бы необходимо.

5 голосов
/ 26 марта 2010

Вам необходимо повторно открыть режим php после EVALED. Очевидно, вы должны сделать это с <?, а не с полным <?php.

Эваля, как правило, следует избегать. Но правила созданы для того, чтобы их нарушать. Есть нить в Когда в php есть eval evil? , которая дает несколько менее догматический совет.

В зависимости от того, что вы хотите сделать, может быть целесообразно использовать исходный файл шаблона с текстом, который будет варьироваться и храниться в локальной переменной до получения шаблона.

Что касается хранения кода, выполняемого в БД ... это происходит в некоторых средах, таких как Drupal, для обеспечения удобной расширяемости, но затем Drupal довольно тщательно исследуется на предмет слабых мест безопасности.

Также, если вы пишете самоизменяющийся код, вам нужно использовать eval (). Не уверен, что кто-то делал это в php, но это было бы интересно.

3 голосов
/ 26 марта 2010

Я думаю, вы пытаетесь eval () что-то, что содержит открывающий тег <?php. И это приводит к ошибке под рукой.

0 голосов
/ 06 октября 2012
$contents = htmlentities($contents);
echo html_entity_decode(eval($contents));
...