Исполнение Php кода из базы данных

Тема в разделе "PHP программирование", создана пользователем TT., 22 мар 2007.

  1. TT.

    TT. Гость

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


    Решение №1. Предварительно записать код в файл, а сам файл присоединить. (подходит если блоки часто меняют содержание)

    Решение №2. Создать библиотеку файлов, имена которых равны (текущее URL, почищенный от символов которые нельзя использовать в название файлов), и присоединять файлы из этой библиотеки. (не надо тратить время на создание файлов)

    Решение №3. Создать таблицу для связи (ID блока + текущий URL) с уникальным именем файла.




    Может я зря заморачиваюсь, и есть более простое решение?
     
  2. GOsha

    GOsha Гость

    Используй функцию eval();

    eval
    (unknown)

    eval - вычисляет строку как PHP-код.

    Описание
    mixed eval (string code_str)

    eval() вычисляет строку, заданную в code_str, как код PHP. Помимо всего прочего, это может оказаться полезным для хранения кода в текстовом поле БД для последующего исполнения.

    При использовании eval() необходимо помнить о нескольких вещах. Запомните, что передаваемая строка обязана быть правильным кодом PHP, включая окончание операторов точкой с запятой, чтобы разборщик не отвалил на строке после eval(), и правильное escap-ируйте в code_str.

    Также помните, что значения, заданные переменным в eval(), останутся действовать затем и в основном скрипте.

    Оператор return завершит вычисление строки немедленно. В PHP 4 eval() возвращает FALSE, если не вызвана return() в вычисляемом коде, и в этом случае возвращается значение, передаваемое в return(). В PHP 3 eval() не возвращает значения.

    Пример 1. eval() - простое объединение текста
    Код (Text):
    <?php
    $string = 'cup';
    $name = 'coffee';
    $str = 'This is a $string with my $name in it.<br>';
    echo $str;
    eval ("\$str = \"$str\";");
    echo $str;
    ?>
    Этот пример выведет:
    This is a $string with my $name in it.
    This is a cup with my coffee in it.

    Подсказка: как всегда при выводе результатов непосредственно в браузер, вы можете использовать функции управления выводом для захвата вывод этой функции и сохранения его, например в string.
     
  3. Plantis

    Plantis Гость

    У меня вот такое код
    Код (PHP):
    print"Under construction<br>start<br>";
    eval ("\$content = \"$content\";");

    print "$content";
    print "<br>finish";
    Выдаёт
    Код (Text):
    Under construction
    start
    print ""; $conn = mysql_connect("$serverdb","$logindb","$passdb"); mysql_select_db("$namedb",$conn); $sql = "SET NAMES 'cp1251'"; mysql_query($sql,$conn); mysql_select_db("$namedb",$conn);     if ( $show == "1") main_menu("21","?????",ru,no,"1"); If ($show == "0" OR $show == "") { for ($i = 1; $i <= 40; $i++) { $sql = " SELECT * FROM page WHERE id ='$i'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_assoc($result); $id = $row["id"]; $type = $row["type"]; $lang = "ru"; $name = $row["ru_name"]; $show = "1"; if ($type == "articles") { article_list($id,$name,$lang,$category,"0"); }; }; }; print"
    ";
    finish
    Что делать?

    Добавлено: Да и еще...
    У меня на домашнем сервере работает. А на сайте нет. Я писал хостингу - сказали, что функция евал() работает у них нормально.
     
  4. TT.

    TT. Гость


    1. Зачем это нужно? Может можно это сделать проще.

    2. Что дает этот код?
    echo '-------------------------';
    var_export($content);
    echo '-------------------------';
    eval ('$content = "' . $content . '";');
    var_export($content);
    echo '-------------------------';
     
  5. Plantis

    Plantis Гость

    Дело в том, что переменная $content - берется из базы данных. В базе данных храниться ПХП код, который надо выполнить
     
  6. TT.

    TT. Гость


    У меня один раз была проблема:
    При назначении переменной значения, нельзя эту переменную использовать. Точно не помню в каком это было случае или с объектами, или со статическими свойставми или с переменными, ну вылечилось это установкой более свещей версии PHP.

    var = var + 'string'; - не работало в какой то версии PHP

    может быть тут:
    eval ("\$content = \"$content\";");
    та же проблема, если на одном сервере работает, а на другом нет.


    Что дал код из второго пункта?
     
  7. Plantis

    Plantis Гость

    Без изменении.

    Код (Text):
    -------------------------'print ""; $conn = mysql_connect("$serverdb","$logindb","$passdb"); mysql_select_db("$namedb",$conn); $sql = "SET NAMES \'cp1251\'"; mysql_query($sql,$conn); mysql_select_db("$namedb",$conn);     if ( $show == "1") main_menu("21","?????",ru,no,"1"); If ($show == "0" OR $show == "") { for ($i = 1; $i <= 40; $i++) { $sql = " SELECT * FROM page WHERE id =\'$i\'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_assoc($result); $id = $row["id"]; $type = $row["type"]; $lang = "ru"; $name = $row["ru_name"]; $show = "1"; if ($type == "articles") { article_list($id,$name,$lang,$category,"0"); }; }; }; print"
    "; '-------------------------'print ""; $conn = mysql_connect("$serverdb","$logindb","$passdb"); mysql_select_db("$namedb",$conn); $sql = "SET NAMES \'cp1251\'"; mysql_query($sql,$conn); mysql_select_db("$namedb",$conn);     if ( $show == "1") main_menu("21","?????",ru,no,"1"); If ($show == "0" OR $show == "") { for ($i = 1; $i <= 40; $i++) { $sql = " SELECT * FROM page WHERE id =\'$i\'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_assoc($result); $id = $row["id"]; $type = $row["type"]; $lang = "ru"; $name = $row["ru_name"]; $show = "1"; if ($type == "articles") { article_list($id,$name,$lang,$category,"0"); }; }; }; print"
    "; '-------------------------
    На домашнем серваке код из второго пункта не работает.
     
  8. TT.

    TT. Гость


    А зачем, полученная из базы данных строка записывается в переменную $content?


    Код (Text):
    print "";
    $conn = mysql_connect("$serverdb","$logindb","$passdb");
    mysql_select_db("$namedb",$conn);
    $sql = "SET NAMES \'cp1251\'";
    mysql_query($sql,$conn);
    mysql_select_db("$namedb",$conn);    
    if ( $show == "1") main_menu("21","?????",ru,no,"1");
    If ($show == "0" OR $show == "") {
    for ($i = 1; $i <= 40; $i++) {
    $sql = " SELECT * FROM page WHERE id =\'$i\'";
    $result = mysql_query($sql,$conn);
    $row = mysql_fetch_assoc($result);
    $id = $row["id"]; $type = $row["type"];
    $lang = "ru";
    $name = $row["ru_name"];
    $show = "1";
    if ($type == "articles") {
    article_list($id,$name,$lang,$category,"0");
    };
    };
    };
    print"
    ";
    Для того что бы этот код выполнился попробуйте:

    eval($content);
     
  9. Plantis

    Plantis Гость

    Код, который сейчас вы вывели, храниться в базе данных - это и есть содержание переменной $content. Я вызываю страницу, в которой находится код для вывода на страницу списка из базы данных.


    А... вроде понял. сейчас попробую. в переменной "контент" - нету текста...

    Добавлено: Спасибо, разобрался. Работает... теперь другой таракан вылез
     
  10. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    бтв Ой не хорошо такие штуки делать.. Лучше код выполнять и в базу вставлять результат. Ибо eval()=95% крутая дыра в безопасности.
     
Загрузка...

Поделиться этой страницей