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 :: Ошибка runtime-created function

 PHP.SU

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


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

> Без описания
Exponat
Отправлено: 17 Мая, 2015 - 17:42:09
Post Id



Частый гость


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


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




Здравствуйте.
Есть такой код
PHP:
скопировать код в буфер обмена
  1.                         "/#DYNAMIC#/is".BX_UTF_PCRE_MODIFIER,
  2.                         create_function('$matches', 'ob_start();
  3.                         $GLOBALS["APPLICATION"]->IncludeComponent(                     
  4.                         "bitrix:iblock.vote",
  5.                         "stars",
  6.                         array(
  7.                                 "IBLOCK_TYPE" => ' . $arResult['IBLOCK_TYPE'].',
  8.                                 "IBLOCK_ID" => ' . $arResult['IBLOCK_ID'].',
  9.                                 "ELEMENT_ID" => ' . $arResult['ID'].',
  10.                                 "ELEMENT_CODE" => "",
  11.                                 "MAX_VOTE" => "5",
  12.                                 "VOTE_NAMES" => array("1", "2", "3", "4", "5"),
  13.                                 "SET_STATUS_404" => "N",
  14.                                 "DISPLAY_AS_RATING" => ' . $arResult['VOTE_DISPLAY_AS_RATING'].',
  15.                                 "CACHE_TYPE" => ' . $arResult['CACHE_TYPE'].',
  16.                                 "CACHE_TIME" => ' . $arResult['CACHE_TIME'].'
  17.                         ),
  18.                         $component,
  19.                         array("HIDE_ICONS" => "Y")
  20.                 );
  21.                         $retrunStr = @ob_get_contents();
  22.                         ob_get_clean();
  23.                         return $retrunStr;'),
  24.                         $arResult["CACHED_TPL"]);

Но выдает ошибку : Parse error: syntax error, unexpected ',' in /....../... .php(66) : runtime-created function on line 6
Указывает на строчку return $retrunStr;'),
Что не так?
 
 Top
Panoptik
Отправлено: 17 Мая, 2015 - 20:45:42
Post Id



Постоянный участник


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


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




почему бы не использовать лямбда-функцию напрямую или проверить этот код с нормально объявленой функцией


-----
Just do it
 
 Top
Exponat
Отправлено: 17 Мая, 2015 - 20:52:49
Post Id



Частый гость


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


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




Спасибо за ответ.
Я впервые познаю этот код, он для меня пока не понятен...
Можете показать в какую сторону смотреть более конкретно?
 
 Top
Ts.Saltan
Отправлено: 17 Мая, 2015 - 20:56:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $func = function($matches) use ($arResult){
  3.    ob_start();
  4.    $GLOBALS["APPLICATION"]->IncludeComponent
  5.    //...
  6.  
  7. };
  8.                         "/#DYNAMIC#/is".BX_UTF_PCRE_MODIFIER,
  9.                         $func
  10. //....
  11.  
 
 Top
Exponat
Отправлено: 17 Мая, 2015 - 21:12:59
Post Id



Частый гость


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


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




А как теперь обратится к шаблонному файлу? Т.е. с кодом который я представил, в шаблонном файле вначале я писал <?ob_start();?> потом в теле указывал метку #DYNAMIC# . А в конце файла шаблона <?$this->__component->arResult["CACHED_TPL"] = @ob_get_contents();
ob_get_clean();?>

А как с вашей версией кода быть?
 
 Top
Ts.Saltan
Отправлено: 17 Мая, 2015 - 21:18:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


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




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

PHP:
скопировать код в буфер обмена
  1.  
  2. $func1 =  create_function('$arg', 'return $arg;');
  3. $func2 = function($arg){ return $arg; };
  4.  

$func1 и $func2 полностью идентичны
 
 Top
Exponat
Отправлено: 17 Мая, 2015 - 21:41:14
Post Id



Частый гость


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


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




Спасибо, теперь догнал Улыбка
Вот конечный вид кода. Ошибок нет но и результата тоже нет:
PHP:
скопировать код в буфер обмена
  1. $func = function($matches) use ($arResult){
  2.    ob_start();
  3.    $GLOBALS["APPLICATION"]->IncludeComponent(
  4.    "bitrix:iblock.vote",
  5.                         "stars",
  6.                         array(
  7.                                 "IBLOCK_TYPE" => $arResult['IBLOCK_TYPE'],
  8.                                 "IBLOCK_ID" => $arResult['IBLOCK_ID'],
  9.                                 "ELEMENT_ID" => $arResult['ID'],
  10.                                 "ELEMENT_CODE" => "",
  11.                                 "MAX_VOTE" => "5",
  12.                                 "VOTE_NAMES" => array("1", "2", "3", "4", "5"),
  13.                                 "SET_STATUS_404" => "N",
  14.                                 "DISPLAY_AS_RATING" => $arResult['VOTE_DISPLAY_AS_RATING'],
  15.                                 "CACHE_TYPE" => $arResult['CACHE_TYPE'],
  16.                                 "CACHE_TIME" => $arResult['CACHE_TIME']
  17.                         ),
  18.                         $component,
  19.                         array("HIDE_ICONS" => "Y")
  20.                 );
  21.                 $retrunStr = ob_get_clean();
  22.         return $retrunStr;
  23.         $arResult["CACHED_TPL"];
  24. };
  25. echo preg_replace_callback("/#DYNAMIC#/is".BX_UTF_PCRE_MODIFIER, $func);
 
 Top
Ts.Saltan
Отправлено: 17 Мая, 2015 - 21:43:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


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




Цитата:

23 строка
не место ей там
(Добавление)
и еще, вывод ошибок включен?
ибо должно было быть предупреждение, мол не хватает 3-го аргумента в функции preg_replace_callback
 
 Top
Exponat
Отправлено: 17 Мая, 2015 - 21:55:19
Post Id



Частый гость


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


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




Да, вывод предупреждения:
Warning: preg_replace_callback() expects at least 3 parameters, 2 given in /........php on line 61

Указывает на строчку echo preg_replace_callback("/#DYNAMIC#/is".BX_UTF_PCRE_MODIFIER, $func);
 
 Top
Ts.Saltan
Отправлено: 17 Мая, 2015 - 21:56:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


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




я ж написал, что 23 строка не там, где надо
PHP:
скопировать код в буфер обмена
  1. preg_replace_callback("/#DYNAMIC#/is".BX_UTF_PCRE_MODIFIER, $func, $arResult["CACHED_TPL"]);
 
 Top
Exponat
Отправлено: 17 Мая, 2015 - 22:00:35
Post Id



Частый гость


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


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




Спасибо! Теперь все ок Улыбка
 
 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