Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: косячит функция eval()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
BesTime
Отправлено: 13 Сентября, 2013 - 13:08:41
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1. $var = str_replace('$USER_ID$', "$user_id",$var);
  2. $var = str_ireplace(")?>", "){?>", $var);
  3. $var = str_ireplace("<?else?>", "<?PHP }else{?>", $var);
  4. $var = str_ireplace("<?endif?>", "<?PHP } ?>", $var);
  5. eval("?>".$var);


пытаюсь заменить условие их хтмл документа
CODE (html):
скопировать код в буфер обмена
  1. <?if($USER_ID$==1)?>Мой айди<?endif?>


Выше указаным скриптом производится замена на следующий пхп код
PHP:
скопировать код в буфер обмена
  1. <?PHP if(1==1){?>Мой айди<?}?>


и дальше с помощью eval замененый хтмл код на пхп выполняется и на странице выводится только "Мой айди".

Но когда допустим в $USER_ID$ находится не число а слово. Тогда выдает следующую ошибку

CODE (htmlphp):
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_LNUMBER in D:\www\htdocs\forum\php\category\category.php(93) : eval()'d code on line 18
  2.  
  3. Parse error: syntax error, unexpected ')' in D:\www\htdocs\forum\php\category\category.php(93) : eval()'d code on line 18
 
 Top
Мелкий Супермодератор
Отправлено: 13 Сентября, 2013 - 13:16:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




0) не пользуйтесь функцией eval
1) обходите стороной eval
2) используйте нормальный PHP, вместо очередного синтаксиса псевдошаблонизатора.
3) в eval должен идти полноценный синтаксически-корректный PHP. Строки свои в кавычки ставите?


-----
PostgreSQL DBA
 
 Top
BesTime
Отправлено: 13 Сентября, 2013 - 13:19:02
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


Мелкий пишет:
0) не пользуйтесь функцией eval
1) обходите стороной eval
2) используйте нормальный PHP, вместо очередного синтаксиса псевдошаблонизатора.
3) в eval должен идти полноценный синтаксически-корректный PHP. Строки свои в кавычки ставите?


Мне нужно имено использовать шаблон. Чем можно заменить eval чтобы достичь нужного эффекта.
О каких строках в кавычках идет речь?
 
 Top
caballero
Отправлено: 13 Сентября, 2013 - 13:25:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




нет никаких причин использовать eval()

не говоря о том что для вычисления eval запускаетеся еще оддин екземпляр компилятора


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Мелкий Супермодератор
Отправлено: 13 Сентября, 2013 - 13:25:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




BesTime пишет:
Но когда допустим в $USER_ID$ находится не число а слово. Тогда

PHP:
скопировать код в буфер обмена
  1. $user_id = 'ваше значение-строка';

что даст в результате? Такое?
PHP:
скопировать код в буфер обмена
  1. <?PHP if(ваше значение-строка==1){?>Мой айди<?}?>


-----
PostgreSQL DBA
 
 Top
caballero
Отправлено: 13 Сентября, 2013 - 13:26:33
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




а чем кстати не угодил ob_start() ?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
BesTime
Отправлено: 13 Сентября, 2013 - 13:29:11
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


Цитата:
Parse error: syntax error, unexpected T_STRING in D:\www\htdocs\forum\php\posts\posts.php(78) : eval()'d code on line 24

вставил на страницу шаблона.
Может косяк из за того что расширение стоит .html?
(Добавление)
caballero пишет:
а чем кстати не угодил ob_start() ?

Несовсем знаком с функцией не представляю как работает
 
 Top
caballero
Отправлено: 13 Сентября, 2013 - 13:33:06
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ну так познакомься


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
BesTime
Отправлено: 13 Сентября, 2013 - 13:38:36
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


caballero пишет:
ну так познакомься

Насколько я понял что он просто заменяем слово в тексте. А мне надо чтобы заменяло слово на php код с дальнейшим его выполнением
(Добавление)
Странно. Когда в переменной находятся английские буквы код срабатывает но с этой ошибкой
Notice: Use of undefined constant abc - assumed 'abc' in D:\www\htdocs\forum\php\posts\posts.php(78) : eval()'d code on line 22

еслиже русские буквы то несрабатывает и выдает эту ошибку
Parse error: syntax error, unexpected T_STRING in D:\www\htdocs\forum\php\posts\posts.php(78) : eval()'d code on line 24

походу дело в кодировке
(Добавление)
можете кинуть пример реализации этого без eval?
 
 Top
caballero
Отправлено: 13 Сентября, 2013 - 14:10:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
можете кинуть пример реализации этого без eval?

http://www.php.su/functions/?ob-start
http://www.php.su/functions/?ob-get-contents


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
esterio
Отправлено: 13 Сентября, 2013 - 14:17:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




PHP:
скопировать код в буфер обмена
  1. function template($template, array $data = array())
  2. {
  3.         if(!is_file($template))
  4.                 return false;
  5.        
  6.         extract($data);
  7.        
  8.         ob_start();
  9.         inlcude($template);
  10.         return ob_get_clean();
  11. }


Вызов
PHP:
скопировать код в буфер обмена
  1. echo template('template.html', array(
  2.         'user' => 'test user'
  3. ));


шаблон
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div class="user">
  2.         <?php echo $user; ?>
  3. </div>
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB