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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исполнить php код из php 
:(
    Опции темы
Zipo
Дата 19.1.2004, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 4.11.2003

Репутация: нет
Всего: 0



Как можно исполнить php-код полученный в результате исполнения другого php-кода.
Есть ли такая функция в php?
Метод:
Записать в файл и потом его проинклудить не сильно подходит.
PM MAIL   Вверх
Secandr
Дата 19.1.2004, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



eval
Код
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.<br>';
echo $str;
eval ("\$str = \"$str\";");
echo $str;
?>
А зачем такое извращение?

Это сообщение отредактировал(а) Secandr - 19.1.2004, 19:15


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
lifer
Дата 19.1.2004, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

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



Eval(string)
Eval берет содержимое строки аргумента и, обрабатывает, это подобно мини PHP/FI скрипту. Выполняется как отдельный скрипт PHP/FI. Любые установки или обращения к переменным внутри eval будут из глобальной области видимости текущего контекста оператора eval. Для строковых аргументов выполняется подстановка переменных замена выполнена на параметрах ряда, таким образом если в выражении нужно использовать переменные , то их нужно экранировать. Несколко примеров:

Код
$a = "echo phpversion();";
eval($a);

eval("echo phpversion();");

eval("\$a=1; echo \$a;");


Это сообщение отредактировал(а) lifer - 19.1.2004, 19:32
PM MAIL WWW ICQ   Вверх
Zipo
Дата 19.1.2004, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 4.11.2003

Репутация: нет
Всего: 0



спсб
Цитата
А зачем такое извращение?

Это не извращение.
Давай обсудим.

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

Если есть идеи, то прошу изложить.

Цитата
eval("\$a=1; echo \$a;");


экранирование не обязательно. В данном случае без него перед исполнением eval $a будет уже считаться переменной и будет заменена на соотв. значение.

eval('$a=1; echo $a;');
PM MAIL   Вверх
lifer
Дата 19.1.2004, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

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



Цитата
экранирование не обязательно. В данном случае без него перед исполнением eval $a будет уже считаться переменной и будет заменена на соотв. значение.

eval('$a=1; echo $a;');


Ну так ты ж апостроф вместо кавычек подставил. Переменные, внутри строки, заключенной в апострофы, не интерполируются.


Это сообщение отредактировал(а) lifer - 19.1.2004, 20:21
PM MAIL WWW ICQ   Вверх
Zipo
Дата 19.1.2004, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 4.11.2003

Репутация: нет
Всего: 0



Цитата
Ну так ты ж апостроф вместо кавычек подставил. Переменные, внутри строки, заключенной в апострофы, не интерполируются.


да я про тоже smile.gif)
это был пример
PM MAIL   Вверх
Secandr
Дата 19.1.2004, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



Zipo Смысл хранить темплейты в БД? Темплейты - вещь редко изменяемая, и если её хранить в файлах, то работает немного быстрее.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Zipo
Дата 19.1.2004, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 4.11.2003

Репутация: нет
Всего: 0



Цитата
Zipo Смысл хранить темплейты в БД? Темплейты - вещь редко изменяемая, и если её хранить в файлах, то работает немного быстрее.


дабы не входить в шок при поиске нужного для редактирования.
И это, немного, несравнимо мало.
PM MAIL   Вверх
MuToGeN
Дата 20.1.2004, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Лучше переделать движок сайта. Eval - это воистину изврат, работает очень медленно.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Secandr
Дата 20.1.2004, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



Zipo Структурируй шаблоны. Или храни сами шаблоны в БД, а обробатывай их следующим образом:
Шаблон из БД читаешь:
Код
бла бла бла
[paste a]
бла бла бла
Спомощью регулярных выражений ищешь (\[paste )([^\]]+)(]) и заменяешь на $my_vars("\\2")
Работать будет быстрее.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Vaulter
Дата 20.1.2004, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



MuToGeN
ну почему же изврат, вот vBulletin на eval работает - шаблоны так парсит
имхо удобно читать такой шаблон:

<table>
<tr><td>$user[name]
<td>$user[usergroup]
</table>

а? )


--------------------
PM MAIL WWW ICQ   Вверх
MuToGeN
Дата 20.1.2004, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



это через echo скорее пропускается, чем через eval.
удобно-то удобно, но время CPU тоже иногда жалко...


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Zipo
Дата 20.1.2004, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 4.11.2003

Репутация: нет
Всего: 0



Шаблоны и php код будут хранится в разных местах. И будут связываться средствами движка.

Суть в хранении всего кода сайта в БД. Кроме картинок и подобного.
Т.е. на винте будет только движок.

если честно, то я не заметил тормозов при использовании eval:

Код

$timer = new Timer();
$str = 'while($b < 5000){ while ($a<5000) { $a++; } $a = 0; $b++; }';
eval($str);

echo "eval:".$timer->end()."<br>";
$b = 0;
$timer->start();
while($b < 5000){
while ($a<5000) { $a++; } $a = 0;
$b++;
} // while
echo $timer->end();


результат:
Код

eval:13.4784259796
13.6008369923


Это сообщение отредактировал(а) Zipo - 20.1.2004, 19:21
PM MAIL   Вверх
MuToGeN
Дата 21.1.2004, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Мдя... Видимо, его уже оптимизировали неплохо... Сам тестил давно, может, еще на PHP 3


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Master
Дата 21.1.2004, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

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



не надо использовать eval
такие движки податливее всего к элементарному взлому.

вот представь такую ситуацию. у тебя по какой-то тех пречине произошел збой в БД и при этом включен register_globals. переменная не обновится, а ты её проэвалиш. всё. двери открыты.

не надо юзать eval. можно и без него обойтись. не дороже будет стоить это уж точно.


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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