как выполнить php из базы данных? - PullRequest
0 голосов
/ 22 августа 2009

Внимание: очень устаревший вопрос с ужасной идеей. Хранение кода, будь то PHP, Javascript или даже HTML, никогда не будет хорошей идеей. Оставив это здесь только для целей документации

У меня немного неловкая проблема.

Обычно при помещении материала в базу данных он сохраняется таким, какой он есть. Итак, если сохраненный материал:

<?php echo "hi!"; ?>

Это будет просто выводиться как "привет!" когда вызывается.
Однако в моем случае я сохраняю простой текст в базе данных. Я не проверяю эти коды, и я отключил волшебные кавычки , чтобы предотвратить экранирование.

При получении данных из БД и размещении их на странице (конечно, перед страницей, если она полностью загружена, поэтому должен выполняться php), это проявляется в исходном коде как тег? Php и, таким образом, невидим (включен хотя бы сафари), поскольку это неизвестный тег для вывода.

блок данных состоит из своего рода шаблона кода Joomla. HTML-теги, Style (CSS), блоки Javascript и php могут быть там. Такие вещи, как css, js и т. Д. Работают, а серверный код - нет.

Есть идеи, как заставить это работать или почему оно не работает? База данных находится в MySQL и MyISAM в качестве механизма хранения. Поле, в котором я сохраняю это длинный текст. Я использую php5 (который утверждает, что на сайте w3c использовать магические кавычки не очень хорошая практика, так как он будет удален в php6, потому что он создает много угроз безопасности, за исключением решения нескольких).

Я пытался использовать eval (), но есть одна маленькая проблема. функция eval () предполагает, что это php, но часто это не так. В основном это будет HTML с некоторыми блоками php.

Ответы [ 4 ]

6 голосов
/ 22 августа 2009

Я рекомендую не хранить PHP в базе данных. База данных предназначена для данных, а не кода.

Если вам нужен условно-запущенный код, поместите его в .php файлы и используйте include() для его выполнения.

Если вам нужен динамический контент, вы можете поместить его в базу данных, а затем просто echo. Не нужно использовать eval().

Не забудьте экранировать выход с помощью htmlentities().

1 голос
/ 22 августа 2009

Вы не можете просто сделать

echo $phpcode;

вам нужно использовать eval . НО знать. У вас может быть много проблем с безопасностью.

1 голос
/ 22 августа 2009

Оператор eval выполнит код PHP, который вы передадите в строке. Но вы должны быть очень осторожными в отношении того, кто имеет доступ к данным в БД, так как будет сложно проверить код на безопасность перед его запуском.

1 голос
/ 22 августа 2009

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

Если код «создан пользователем», вы можете настроить урезанную среду выполнения PHP как «песочницу».

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