Можно ли загрузить исполняемый код PHP из базы данных? - PullRequest
0 голосов
/ 10 января 2010

Если бы в базе данных был PHP-код, мог бы я как-то "включить" его в PHP и выполнить его? Конечно, я мог бы написать файл с этим содержимым и просто включить этот файл, но, может быть, в PHP есть что-то похожее на eval () JavaScript?

Ответы [ 6 ]

5 голосов
/ 10 января 2010

Да, в PHP тоже есть eval(), но считается очень плохой практикой его использовать.

В этом вопросе обсуждаетсяосновные моменты хорошо, не осуждая это полностью.

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

1 голос
/ 10 января 2010

Обратите внимание, что не использование eval(), а запись файла из БД и включая его, будет иметь точно такой же риск для безопасности, хотя ... дело не столько в eval() или не в eval() проблеме это: что если кто-то взломает вашу базу данных и сможет изменить код PHP? они смогут заставить ваш сервер запускать свои php-скрипты и делать все, что захотят.

0 голосов
/ 16 декабря 2011

А как насчет использования файлового кэша? Вы всегда можете временно сохранить PHP-код в файле и включить его. Простая логика с генерацией файлов, хранением в кеше, включая корректный файл и обновление старых файлов (контрольная сумма md5 + кэш-память файла сделанная временная метка + временная метка изменения). Затем сравните обе временные метки, чтобы узнать, требуется ли обновление кэша.

0 голосов
/ 10 января 2010

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

(Ну, собственно, это то же имя функции, что и в Javascript ;-) - и это плохая практика на обоих языках - какое совпадение; или нет)


Другое решение, которое иногда используется для:

  • ваш код PHP находится в базе данных
  • извлекает его иногда (не каждый раз) и сохраняет в файл, используемый как механизм кэширования
  • include этот файл - который будет выполнен

Например, я видел довольно старые CMS, работающие таким образом ... Но обратите внимание, что они в основном используют файлы в качестве кэша (чтобы не делать слишком много запросов к БД) - даже если это работало довольно хорошо.

0 голосов
/ 10 января 2010
0 голосов
/ 10 января 2010

Существует eval () для PHP. Но, пожалуйста, никогда не используйте его! : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...