написать PHP-код в MySQL? - PullRequest
       4

написать PHP-код в MySQL?

0 голосов
/ 14 июля 2010

Есть ли возможность написать php-код в mysql, а затем использовать его в php, чтобы обработать вывод, а не просто написать?

Я бы хотел использовать mysql вместо включенного файла ... если это возможно.

Ответы [ 7 ]

6 голосов
/ 14 июля 2010

Вы можете использовать функцию eval() для запуска строки в виде кода PHP.

Сохраните строку в базе данных, затем получите ее из запроса и запустите eval.

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

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

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

2 голосов
/ 14 июля 2010

Да, вы можете сохранить код PHP как любой другой текст, а затем использовать eval() для его запуска.

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

Так что не делай этого!
На самом деле, я серьезно отношусь к этому. В конце у вас будет намного больше работы.

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

2 голосов
/ 14 июля 2010

Конечно, вы можете использовать eval.Но будьте осторожны - eval - это зло, и если он содержит ввод пользователя, злоумышленник может захватить ваш сервер.Так что будьте добры и не используйте eval!

2 голосов
/ 14 июля 2010
1 голос
/ 14 июля 2010

Как ответили другие, да, это возможно;Вы можете использовать eval() для запуска произвольного кода PHP.Но редко, если вообще хорошая идея хранить PHP в базе данных и eval() it.

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

0 голосов
/ 14 июля 2010

Как все говорят, это плохая практика - хранить ваш код в базе данных и использовать функцию eval.Мои личные причины:

  • Я забочусь об отладке (есть плагины для php, которые позволяют отлаживать ваш php-код. PHP-отладчик интегрирован в PhpEd, и я считаю, что он также интегрирован в NetBeans) и было бы сложнее с eval.

  • Проблемы производительности:

Скорость Eval Помимо проблем безопасности, Eval также имеетпроблема быть невероятно медленной.В моем тестировании на PHP 4.3.10 он был в 10 раз медленнее, чем обычный код, и в 28 раз медленнее на PHP 5.1 beta1.(Источник: http://blog.joshuaeichorn.com/archives/2005/08/01/using-eval-in-php/)

РЕДАКТИРОВАТЬ: Вот мои результаты тестирования выше на моем компьютере (PHP 5.3.0):

Eval: 1000000 раз занял 8.2261250019073n

Тот же код не был оценен: 1000000 раз занял 0.27089691162109n

Eval в функции: 1000000 раз занял 0.8873131275177n

So ""Код в 30,4 раза медленнее, чем не проверенная версия того же кода.

0 голосов
/ 14 июля 2010

Конечно, это возможно и может быть хорошим улучшением скорости. Я использую CMS "Contenido" (www.contenido.org), где эта практика используется для некоторых редактируемых компонентов (макеты / модули / типы данных и т. Д.). Наконец, весь код для одной статьи хранится в одном поле и выполняется одним вызовом eval. Contenido не совершенен, тем не менее, хороший пример для этой практики.

Отсутствие контроля версий является недостатком. Но это не реальная проблема с простым способом экспорта и импорта фрагментов кода.

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