Баг или фича common.class.php?

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Баг или фича common.class.php?

Сообщение xor » Вс июн 26, 2016 2:47 am

Меня напрягают сообщения в логе со словом ERROR типа:
01:22:27 ERROR [page.common.class]: Error executing job motiondetect0_detected (480263): OK , правда, в конце и пишется ОК.

Посмотрел функцию runScheduledJobs в common.class.php
Добавил несколько отладочных строк (//added)

Код: Выделить всё

/**
 * Summary of runScheduledJobs
 * @return void
 */
function runScheduledJobs()
{
   SQLExec("DELETE FROM jobs WHERE EXPIRE <= '" . date('Y-m-d H:i:s') . "'");

   $sqlQuery = "SELECT *
                  FROM jobs
                 WHERE PROCESSED = 0
                   AND EXPIRED   = 0
                   AND RUNTIME   <= '" . date('Y-m-d H:i:s') . "'";

   $jobs  = SQLSelect($sqlQuery);
   $total = count($jobs);

   for ($i = 0; $i < $total; $i++)
   {
      echo "Running job: " . $jobs[$i]['TITLE'] . "\n";
      $jobs[$i]['PROCESSED'] = 1;
      $jobs[$i]['STARTED']   = date('Y-m-d H:i:s');
      
      SQLUpdate('jobs', $jobs[$i]);
      $url    = BASE_URL . '/objects/?job=' . $jobs[$i]['ID'];
      $result = trim(getURL($url, 0));
         DebMes('1 runScheduledJobs $result='.$result . "\n"); //added
      $result = preg_replace('/<!--.+-->/is', '', $result);
         DebMes('2 runScheduledJobs $result='.$result .' '. strlen($result)."\n"); //added
         $arr1 = str_split($result);   //added
         DebMes('0 ->'.$arr1[0]."<\n");//added
         DebMes('1 ->'.$arr1[1]."<\n");//added
         DebMes('2 ->'.$arr1[2]."<\n");//added
         DebMes('3 ->'.$arr1[3]."<\n");//added
         DebMes('4 ->'.$arr1[4]."<\n");//added

    
      if ($result != 'OK') //<-- тут-то и сравнивается 

      {
         getLogger(__FILE__)->error(sprintf('Error executing job %s (%s): %s', $jobs[$i]['TITLE'], $jobs[$i]['ID'], $result));
      } 
   }
}
 
Вывод лога:

Код: Выделить всё

02:15:38 DEBUG [root]: 1 runScheduledJobs $result=OK (at C:\_majordomo\htdocs\lib\general.class.php:553) //тут вроде всё норм 
02:15:38 DEBUG [root]: 2 runScheduledJobs $result=OK 5  (at C:\_majordomo\htdocs\lib\general.class.php:553) //тут тоже, но длина строки 5 символов 
02:15:38 DEBUG [root]: 0 ->� (at C:\_majordomo\htdocs\lib\general.class.php:553) //символ непечатный, извиняюсь))
02:15:38 DEBUG [root]: 1 -><  (at C:\_majordomo\htdocs\lib\general.class.php:553) //символ непечатный
02:15:38 DEBUG [root]: 2 -><  (at C:\_majordomo\htdocs\lib\general.class.php:553) //символ непечатный
02:15:38 DEBUG [root]: 3 ->O< (at C:\_majordomo\htdocs\lib\general.class.php:553) //О
02:15:38 DEBUG [root]: 4 ->K< (at C:\_majordomo\htdocs\lib\general.class.php:553) //К
//ну и дальше, естественно:
02:15:38 ERROR [page.common.class]: Error executing job motiondetect2_detected (480349): OK (at C:\_majordomo\htdocs\lib\common.class.php:451)
 
$result берется из getURL, в getURL он попадает из LoadFile fread.

Можно, конечно, рассматривать это как фичу,но сочетание ERROR и OK как-то неаккуратненько, по-моему.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Баг или фича common.class.php?

Сообщение sergejey » Вт июн 28, 2016 9:40 am

Баг, явно. Непечатные символы не должны там быть. Только не могу понять откуда они там. getURL по-моему не использует LoadFile -- там используется cURL. Если получится докопаться откуда эти символы позникают, то буду весьма признателен.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Баг или фича common.class.php?

Сообщение xor » Пт июл 01, 2016 1:21 am

1. У меня это проявляется только для job (добавил debmes в getUrl)
(или на равенство ОК только джобы и проверяются?)

Код: Выделить всё

00:56:53 ERROR [page.common.class]: Error executing job motiondetect0_detected (490009): OK (at C:\_majordomo\htdocs\lib\common.class.php:445) 
00:56:52 DEBUG [root]: geturl curl_exec http://127.0.0.1:80/objects/?job=490009 (at C:\_majordomo\htdocs\lib\general.class.php:553) 
00:56:00 DEBUG [root]: geturl curl_exec http://127.0.0.1:80/objects/?object=ClockChime&op=m&m=onNewMinute (at C:\_majordomo\htdocs\lib\general.class.php:553) 
...
00:55:00 DEBUG [root]: geturl curl_exec http://127.0.0.1:80/objects/?object=ClockChime&op=m&m=onNewMinute (at C:\_majordomo\htdocs\lib\general.class.php:553) 
00:54:00 DEBUG [root]: geturl curl_exec http://127.0.0.1:80/objects/?object=ClockChime&op=m&m=onNewMinute (at C:\_majordomo\htdocs\lib\general.class.php:553) 
00:53:00 DEBUG [root]: geturl curl_exec http://127.0.0.1:80/objects/?object=ClockChime&op=m&m=onNewMinute (at C:\_majordomo\htdocs\lib\general.class.php:553)         
2. в консоли

Код: Выделить всё

Command: bin2hex(geturl('http://127.0.0.1:80/objects/?job=489897',0))
Result:
efbbbf
При гуглении этой последовательности байтов Википедия говорит, что это BOM:
Маркер последовательности байтов или метка порядка байтов (англ. Byte Order Mark (BOM)) — Юникод-символ, используемый для индикации порядка байтов текстового файла. Его кодовый символ U+FEFF. По спецификации, его использование не является обязательным, однако, если маркер последовательности байтов используется, то он должен быть установлен в начале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать, какой кодировкой Unicode закодирован текст.
или
http://www.herongyang.com/Unicode/Notep ... FBBBF.html
What Is BOM (Byte Order Mark)? BOM is the informal name of the special Unicode character U+FEFF "ZERO WIDTH NO-BREAK SPACE", when it is used to prepend to a stream of Unicode characters as a "signature". This signature tells the receiver of this stream to be ready to process Unicode characters and pay attention to the serialization order of the encoding octets.

When this BOM character, U+FEFF, is serialized in UTF-8 encoding, it becomes an octet sequence of EF BB BF (\xEFBBBF).

As you can see from the previous tutorial, Notepad prepends U+FEFF to the text and converted it to EFBBBF when saving the text in UTF-8 encoding. This is why I was getting these 3 extra bytes, EFBBBF, at the beginning of the saved UTF-8 text file.

With the introduction of the BOM character, now we need to ready to support two variations of UTF-8 text file formats:

UTF-8 text file with no leading BOM character.
UTF-8 text file with the leading BOM character.
Это значит, что тут как-то используется UTF-8 with BOM?
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Баг или фича common.class.php?

Сообщение xor » Сб июл 02, 2016 10:18 pm

У себя в runScheduledJobs поправил так

Код: Выделить всё

     
 //if ($result != 'OK')
 if(strstr($result,'OK')!='OK')
т.е., проверяется $result на то, что он не оканчивается на ОК (без учета предыдущих символов)

Сообщение об ошибке исчезло.
Не знаю, правильно ли это в мировом масштабе.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Баг или фича common.class.php?

Сообщение sergejey » Пн июл 18, 2016 6:06 pm

Исправлено.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить