Просьба добавить сюда отсылку на глобальную переменную, так так не раз встречаем ошибку

Рейтинг: 3.0000  
На голосовании
Предложил Пользователь 17890 14.01.2019 15:02:34

Просьба добавить сюда отсылку на глобальную переменную, так так не раз встречаем ошибку

ошибка:

Call to a member function IncludeComponent() on null (0)
/home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmessagethemecompiler.php(387) : eval()'d code:5
#0: eval
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmessagethemecompiler.php:387
#1: Bitrix\Main\Mail\EventMessageThemeCompiler->executePhp(string, integer)
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmessagethemecompiler.php:369
#2: Bitrix\Main\Mail\EventMessageThemeCompiler->execute()
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmessagecompiler.php:144
#3: Bitrix\Main\Mail\EventMessageCompiler->setMailBody()
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmessagecompiler.php:99
#4: Bitrix\Main\Mail\EventMessageCompiler->compile()
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/event.php:224
#5: Bitrix\Main\Mail\Event::handleEvent(array)
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmanager.php:171
#6: Bitrix\Main\Mail\EventManager::executeEvents()
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmanager.php:39
#7: Bitrix\Main\Mail\EventManager::checkEvents()
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/classes/general/event.php:20
#8: CAllEvent::CheckEvents()
       /home/bitrix/ext_www/supersite.ru/bitrix/modules/main/tools/cron_events.php:16

фикс в методе Bitrix\Main\Mail\EventMessageThemeCompiler::executePhp()


Рейтинг: 0  
Пользователь 17890 15.01.2019 23:04:58
я уже начал забывать про сайты в cp1251, даже основные сайты битрикса теперь у utf8 и забыл проверить эту настройку

nano /etc/httpd/bx/conf/bx_ext_supersite.ru.conf
#add
php_admin_value mbstring.internal_encoding CP1251
php_admin_value mbstring.func_overload 0
# restart
apachectl restart


поставил, как ТП рекомендовала, ждем.

Почему вот только тест админки не ругался на дисконфиг php, а?
Рейтинг: 0  
Пользователь 17890 17.01.2019 04:34:37
И вообще нужно диагностировать сперва eval код, хотя-бы примитивным способом:

/home/bitrix/ext_www/supersite.ru/bitrix/modules/main/lib/mail/eventmessagethemecompiler.php:387

try
      {
         exec('php -d mbstring.func_overload=0 -d mbstring.internal_encoding=CP1251 -f "' . __DIR__ . '/test_eval.php"', $result);
         $resultJson = json_decode(implode('', $result));
         if ($resultJson['status'] != 'ok') {
            throw new StopException($result . ' BAD TEMPLATE::: ' . $template);
         }
      }
      catch(StopException $e)
      {
         ob_clean();
         throw $e;
      }

      return $result;


новый файл /home/bitrix/ext_www/odetta.ru/bitrix/modules/main/lib/mail/test_eval.php :

if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";

ini_set('display_errors', 1);

$arParams = $this->params;
$result = eval('use \Bitrix\Main\Mail\EventMessageThemeCompiler; global $APPLICATION; ob_start();?>' . $template . '<? return ob_get_clean();');
echo json_encode(['result' => $result, 'status' => 'ok']);

ini_set('display_errors', 0);
]]

так мы и ошибочный шаблон письма вычислим, а также и сможем в дальнейшем обезопасится от исключения throw new StopException($result . ' BAD TEMPLATE::: ' . $template);, чтобы его игнорировать.