Проблема str_replace и eval.

Тема в разделе "PHP", создана пользователем Maza, 26 фев 2011.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Не могу понять, как сделать, чтоб заменяемый текст вставал именно в это место
    Код:
    {php}
    Использую PHP4. Текст всегда вставляется в начало в не зависимости от того где стоит описатель.
    Код:
    {php}
    Исходник:
    PHP:
    <?php
    $page 
    "Это супер строка импортированная {php} имеет очень большой размер";

    $includedate 'print rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";';

    $page=str_replace("{php}", eval ($includedate), $page);
    echo 
    $page;
    ?>
     
  2. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    628
    Симпатии:
    1.388
    Конечно будет вначале, т.к. в данном случае eval выполняет код, который осуществляет вывод текстовой информации.
    Если вы идете данным путем, то у вас два варианта:
    1. сделать так
    PHP:
    $includedate = print rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";
    2. если необходима постоянная генерация чисел, сделать так
    PHP:
    function includedate { return rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";}
    $page=str_replace("{php}"includedate$page);
     
    Maza нравится это.
  3. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    А, можно ли сделать так чтоб именно в этом месте
    Код:
    {php}
    исполнялся и выводился php код?
     
  4. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Вообще eval это вред.
    Что значит исполнялся и выводился? Он должен исполняться в одном месте, а выводиться в другом!!!
     
  5. VandJ

    VandJ

    Регистр.:
    8 апр 2008
    Сообщения:
    318
    Симпатии:
    113
    Можно
    PHP:
    $page "Это супер строка импортированная {php} имеет очень большой размер"
    echo 
    preg_replace("#{php}#e","rand(2009,2011).' год, '.rand(1,12).' месяц, '.rand(1,30).' число'",$page);
     
    Maza нравится это.
  6. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Я имел в виду, чтоб можно было вставить php код в котором есть
    Код:
    print echo
    и вывод происходил именно на место шаблона?
    P.s думаю видимо нельзя ...
     
  7. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Можно конечно, но это не правильно.
    PHP:
    ob_start();
    echo 
    "Hello ";
    $out ob_get_contents();
    В переменной $out и будет Hello. Но смысла в такой конструкции я не вижу.
     
  8. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Самый простой способ
    PHP:
    <?php
    function content ($path)
    {
    global 
    $title,$news,$menu;
    $temp str_replace ("{title}"$title$temp );
    $temp str_replace ("{menu}"$menu$temp);
    $temp str_replace ("{news}",  $news$temp);
    echo (
    "$temp");
      }
    content("pages.php");  //файл шаблона
    exit;
    ?>
    это пихаем в шаблон {news} {title}
    еще проще
    так
    PHP:
    $TPL=file_get_contents("template.html");// шаблон 
     
    $TPL=str_replace("{prevs}","$prevs",$TPL);
     
    $TPL=str_replace("{title}","$title",$TPL);
    $TPL=str_replace("{key}","$title",$TPL);
     
    $TPL=str_replace("{desc}","$title",$TPL);
    с этой $TPL переменной делаем что желаем
    хоть вывод в буфер echo $TPL;
    хоть запись в кеш или файл.
    в шаблоне template.html {desc} {key} {title} и так далее.
     
  9. VandJ

    VandJ

    Регистр.:
    8 апр 2008
    Сообщения:
    318
    Симпатии:
    113
    Вот, такие костыли пришли мне в голову. :crazy:
    PHP:
    $page "Это супер строка импортированная {php} имеет очень большой размер";
    function 
    includedate($matches
      {
      echo 
    $matches[1]; 
      include 
    'includedate.php'// В includedate.php любой код.
      
    }
    echo 
    preg_replace_callback ("#([\W\w\S\s]*?){php}#""includedate"$page);
    includedate.php
    PHP:
    <?php
    print rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";
    ?>
     
Статус темы:
Закрыта.