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
Форумы портала PHP.SU :: Версия для печати :: косячит функция eval()
Форумы портала PHP.SU » » Вопросы новичков » косячит функция eval()

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

1. BesTime - 13 Сентября, 2013 - 13:08:41 - перейти к сообщению
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
2. Мелкий - 13 Сентября, 2013 - 13:16:05 - перейти к сообщению
0) не пользуйтесь функцией eval
1) обходите стороной eval
2) используйте нормальный PHP, вместо очередного синтаксиса псевдошаблонизатора.
3) в eval должен идти полноценный синтаксически-корректный PHP. Строки свои в кавычки ставите?
3. BesTime - 13 Сентября, 2013 - 13:19:02 - перейти к сообщению
Мелкий пишет:
0) не пользуйтесь функцией eval
1) обходите стороной eval
2) используйте нормальный PHP, вместо очередного синтаксиса псевдошаблонизатора.
3) в eval должен идти полноценный синтаксически-корректный PHP. Строки свои в кавычки ставите?


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

не говоря о том что для вычисления eval запускаетеся еще оддин екземпляр компилятора
5. Мелкий - 13 Сентября, 2013 - 13:25:05 - перейти к сообщению
BesTime пишет:
Но когда допустим в $USER_ID$ находится не число а слово. Тогда

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

что даст в результате? Такое?
PHP:
скопировать код в буфер обмена
  1. <?PHP if(ваше значение-строка==1){?>Мой айди<?}?>
6. caballero - 13 Сентября, 2013 - 13:26:33 - перейти к сообщению
а чем кстати не угодил ob_start() ?
7. BesTime - 13 Сентября, 2013 - 13:29:11 - перейти к сообщению
Цитата:
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() ?

Несовсем знаком с функцией не представляю как работает
8. caballero - 13 Сентября, 2013 - 13:33:06 - перейти к сообщению
ну так познакомься
9. BesTime - 13 Сентября, 2013 - 13:38:36 - перейти к сообщению
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?
10. caballero - 13 Сентября, 2013 - 14:10:36 - перейти к сообщению
Цитата:
можете кинуть пример реализации этого без eval?

http://www.php.su/functions/?ob-start
http://www.php.su/functions/?ob-get-contents
11. esterio - 13 Сентября, 2013 - 14:17:47 - перейти к сообщению
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>

 

Powered by ExBB FM 1.0 RC1