Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнения куска кода через eval() из строки 
:(
    Опции темы
InfMag
Дата 26.5.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Есть такая задача, из строки выделяются только куски кода типа <?php...?>
И через eval должно выполниться только ...
Вот мои попытки:
Код

$evalcode = preg_replace("#\<\?php(.+)\?\>#siU", "\\1", $str);
eval($evalcode);
$str = preg_replace("#\<\?php(.+)\?\>#siU", "", $str);

Ничего к сожалению не получилось, потомчу что там идет весь много чего и таких php вставок может быть сколько угодно.
Прошу помощи.

Вот например, имеется строка:
Код

Блаблабла <?php $a=1; ?> sss
Бла
<?php
$a++;
?>
гыгыгы

И должно выполниться только $a=1; и $a++; 
PM   Вверх
vasac
Дата 26.5.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



InfMag, вы выделяется строки вместе с тэгами <?php и ?> а их в исполняемом коде, который скармливается eval() быть не должно.

И сначала попробуйте просто вытащить нужный текст, а потом уже eval привлекайте.

ЗЫ. А если это берется из файла, то можно просто подключить его из include, включив буфер для вывода и все выполнится и так. 
PM WWW   Вверх
InfMag
Дата 26.5.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



vasac, Берется из базы.
"вы выделяется строки вместе с тэгами <?php и ?> а их в исполняемом коде, который скармливается eval() быть не должно." - дык зачем по вашему я написал рег? ---> $evalcode = preg_replace("#\<\?php(.+)\?\>#siU", "\\1", $str); 
PM   Вверх
vasac
Дата 26.5.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



InfMag, а пардон. Так все у вас нормально с регуляркой. Только зачем _replace?
Код

preg_match_all( "#\<\?php(.+)\?\>#siU", $str, $A );

В итоге 2 совпадения. Структура A:
Код

Array
(
    [0] => Array
        (
            [0] => <?php $a=1; ?>
            [1] => <?php
$a++;
?>
        )

    [1] => Array
        (
            [0] =>  $a=1; 
            [1] => 
$a++;

        )

)


A[1] - набор вычлененных кодов. Выполнять по очереди. 
PM WWW   Вверх
InfMag
Дата 26.5.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



vasac, мне бы еще хорошо реализовать так, что если в этом коде будет написано например echo, то вывод делался именно там, где было это <?php ... ?> 
PM   Вверх
vasac
Дата 26.5.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Можно без регулярок:
Код

 $str = 'БлаБла <?php echo "Раз"; ?> sss
Бла
<?php
 echo "Два";
?>
БлаБла
';

 $A = explode( '<?php', $str );
 $sz = sizeof( $A );
 
 print $A[ 0 ];
 
 for ( $i = 1; $i < $sz; $i++ ) {
   $B = explode( '?>', $A[ $i ] );
   eval( $B[ 0 ] );
   if ( sizeof( $B ) > 1 ) print $B[ 1 ];
 }


Только не будет работать с "<?php" в верхнем регистре "<?PHP" например. И если "?>" будет встречаться в комментариях. А так вполне... 
PM WWW   Вверх
InfMag
Дата 26.5.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Вот что уже написал:
Код

preg_match_all("#\<\?php(.+)\?\>#siU", $str, $arreval);
for ($i=0; $i<sizeof($arreval[1]); $i++) @eval($arreval[1][$i]);
$str = preg_replace("#\<\?php(.+)\?\>#siU", "", $str);

Только теперь мне нужно сделать так, чтобы результат eval выводился именно там, где и был <?php?> 
PM   Вверх
vasac
Дата 26.5.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



InfMag, не понятно. Нужно чтобы выводился текст вне тэгов php, а сами тэги заменялись на их результат? Мой предыдущий пример это и делает. 
PM WWW   Вверх
InfMag
Дата 26.5.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



vasac, большое спасибо, очень помог, +1
Вот что получилось:
Код

function cutstr($str)
{
    $str = str_replace('&', '&amp;', $str);
    $str = str_replace('"', '&quot;', $str);
    $str = str_replace("\r", '', $str);
    $str = str_replace("\n", '<br>', $str);
    $str = str_replace("\t", '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $str);
    return $str;
}

function cut($str)
{
    $a = explode('<?php', $str);
    echo cutstr($a[0]);
    for ($i=1; $i<sizeof($a); $i++)
    {
        $b = explode('?>', $a[$i]);
        @eval($b[0]);
        if (sizeof($b)>1) echo cutstr($b[1]);
    }
}

echo cut($var);
 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1291 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.