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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выполнить php код сформированный динамически 
V
    Опции темы
BSOD
Дата 20.2.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вобщем есть строка с PHP кодом, нужно ее выполнить...
пробовал так:

Код

                  $name = tempnam("./","tmp_").".php";
    $file = fopen($name,"w+");
    fwrite($file,$string_with_code);
    include_once ($name);
    fclose($file);
    unlink($name);


но помоему это немного не через то место, да и файл в конце почему-то не удаляется....

как сделать правильно?


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
Serkys
Дата 20.2.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Используй функцию eval().
PM MAIL   Вверх
PARROT
Дата 20.2.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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





--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Serkys
Дата 20.2.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



PARROT, если не секрет, при чём здесь rmdir()? Или я туплю?
PM MAIL   Вверх
PARROT
Дата 20.2.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Serkys, может и я уже туплю, ночь, но помоему он пытается удалить директорию.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
BSOD
Дата 20.2.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



эммм eval() почему-то не покатил, возможно потому, что в строке кроме php кода еще хтмл теги есть....

мне собсна нада открыть один файлик, найти в нем что-то вроде {insert_data_here}, заменить это на содержимое другого файлика, получится страничка с php, теперь ее надо выполнить и отдать юзеру...


делаю так:

Код

function show_page($page)
{
    global $INDEX_PAGE;
    $page = file($page);
    $page = implode("\n",$page);
    $index = file($INDEX_PAGE);
    $index = implode("\n",$index);
    $index = ereg_replace("{text_data}",$page,$index);
    
    /*$name = tempnam("./","tmp_").".php";
    $file = fopen($name,"w+");
    fwrite($file,$index);
    include_once ($name);
    fclose($file);
    unlink($name);*/
    eval($index);
}


не работает.... 

вернее если убрать eval(), и раскоментить закоментированно, то работает, но это немного криво...  smile 


PARROT, rmdir папку удаляет... ну unlink впринципе должен удалять файл, ну да это не важно, все равно тот способ кривой, потому это вопрос не по теме smile

Это сообщение отредактировал(а) BSOD - 20.2.2007, 23:31


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
PARROT
Дата 20.2.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



BSOD, если папка удаляется, то наверно вместе с файлом?


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
BSOD
Дата 20.2.2007, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PARROT @  20.2.2007,  22:27 Найти цитируемый пост)
 если папка удаляется, то наверно вместе с файлом?

но наверно если файл в папке не один, то удалятся и остальные файлы  smile 

Это сообщение отредактировал(а) BSOD - 20.2.2007, 23:31


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
szz
Дата 21.2.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

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



PARROT, удажение тут совершенно не причем. Удажение у него в коде, потому что файл временный записан, который вообще записан быть не должен smile тут нужен эвал и только.


Вот как надо:

Код

<?
// без html
$phpcode = '$x=55;echo $x*2;';
eval($phpcode);

echo '<hr>';

// c html:
$phpcode = '<b><?$x=55;echo $x*2;?></b>';
eval('?>'.$phpcode.'<?'); // обрати внимание на начальный и конечный инвертированный php таг!
?>


Добавлено @ 01:03 
А вот и вся функция: 
Код

function show_page($page)
{
    global $INDEX_PAGE;
    $page = file($page);
    $page = implode("\n",$page);
    $index = file($INDEX_PAGE);
    $index = implode("\n",$index);
    $index = ereg_replace("{text_data}",$page,$index);
    eval('?>'.$index.'<?'); // я только инвертированные таги добавил
}


А вообще-то это не очень хорошо - выполнять код на бегу. Лучше этого избегать, если есть возмжность.

Добавлено @ 01:07 
Цитата

если папка удаляется, то наверно вместе с файлом?

PARROT, а вот и нет! Если там есть хоть один файл - то стирание папки провалится. Это вам не в винде "Удалить папку" кликнуть smile
  Чтобы удалить папку, нужно рекурсивно пробежаться по всем вложенным папкам и удалить все-все файлы - только когда папку пуста rmdir сработает smile
 Ты ведь сама привела ссылку на ман - там написано "Директория должна быть пустой и должны иметься необходимые для этого права."


--------------------
PM   Вверх
BSOD
Дата 21.2.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спавибо szz, действительно помогло!  smile 
А если не секрет, то почему так работает (не-то до меня немного не дошло)?  smile 


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
szz
Дата 22.2.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

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



Потому что мы таким образом как бы изменяем область работы php.
в стандартном php файле дефолтная область - текстовая. А для эвала - phpшная.

А мы тут дурим eval, меняя его дефолтную область на нужную нам - т.е. текстовую.
  Надеюсь, понятно объяснил smile


--------------------
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.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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