Страница 2 из 3

Re: Программный код - качество и пояснения

Добавлено: Пт май 22, 2015 10:21 am
sergejey
igk1972 писал(а):Запуск циклов стартует startup_maintenance.php (в нем делает бекап бд, бекап файлов, и еще ко-что)
Спрашивается зачем файл fix_linked_properties.php в котором основная часть кода из startup_maintenance.php (или наоборот)?
И еще есть файл periodical_db_save.php
fix_linked_properties.php не нужен, его код был перенесён в startup_maintenance
periodical_db_save.php для периодического сохранения базы данных, используется в некоторых специфичных конфигурациях
про код с календарём не прокомментирую, т.к. его даже не помню -- сам модуль рудимент и код его писался лет 10 назад наверное

Re: Программный код - качество и пояснения

Добавлено: Пт май 22, 2015 11:04 am
LutsenkoDenis
sergejey писал(а):сам модуль рудимент и код его писался лет 10 назад наверное
Сделал pull request на удаление этого модуля.

Re: Программный код - качество и пояснения

Добавлено: Вс сен 20, 2015 11:25 pm
LutsenkoDenis
Файл /lib/perfmonitor.class.php
1. В функции EndMeasure условие if ($save_to_db) и все что после него никогда не выполняется. Вопрос, а нафиг это в коде тогда?
2. В той же функции еще есть ошибка: вот так $perf_data[$mpoint]['NUM']++; делать нельзя. Т.к. нельзя прибавлять что-либо к не объявленной переменной или к не существующему элементу массива.

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

/**
* Ending measurement
*
* Ending measurement of time for specified block
*
* @param string $mpoint monitoring block name
*/
 function EndMeasure($mpoint, $save_to_db=0) {
  global $perf_data;
  if (!$perf_data[$mpoint]['START']) {
   return;
  }
  $perf_data[$mpoint]['END']=getmicrotime();
  if(!$perf_data[$mpoint]['MEMORY_END'] && function_exists('memory_get_usage')) {
   $perf_data[$mpoint]['MEMORY_END']=memory_get_usage(); 
  }
  $perf_data[$mpoint]['TIME']+=$perf_data[$mpoint]['END']-$perf_data[$mpoint]['START'];
  $perf_data[$mpoint]['NUM']++;
  return;
  if ($save_to_db) {
   global $db;
   if ($db->dbh) {
    $rec=array();
    $rec['OPERATION']=substr($mpoint, 0, 200);
    $rec['COUNTER']=1;
    $rec['TIMEUSED']=$perf_data[$mpoint]['TIME'];
    $rec['ADDED']=date('Y-m-d H:i:s');
    if ($_SERVER['REQUEST_URI']) {
     $rec['SOURCE']='web';
    } else {
     $rec['SOURCE']='cmd';
    }
    SQLInsert('performance_log', $rec);
   }
  }
 } 

Re: Программный код - качество и пояснения

Добавлено: Пн сен 21, 2015 12:20 pm
sergejey
LutsenkoDenis писал(а):Файл /lib/perfmonitor.class.php
1. В функции EndMeasure условие if ($save_to_db) и все что после него никогда не выполняется. Вопрос, а нафиг это в коде тогда?
Чтобы было :)
Это функционал сбора статистики производительности в базу данных, в продакшене не используется, но оставлен для профилирования.
LutsenkoDenis писал(а):2. В той же функции еще есть ошибка: вот так $perf_data[$mpoint]['NUM']++; делать нельзя. Т.к. нельзя прибавлять что-либо к не объявленной переменной или к не существующему элементу массива.
Ну не красиво немножко, это да, но не так критично, что прямо нельзя -- работает же :)

Re: Программный код - качество и пояснения

Добавлено: Пн сен 21, 2015 7:42 pm
LutsenkoDenis
sergejey писал(а):Чтобы было :)
Это функционал сбора статистики производительности в базу данных, в продакшене не используется, но оставлен для профилирования.
Подход конечно забавный, но как-то не правильный ни разу. Для профилирования чего??? там перед и условием RETURN из функции делается... До профилирования не доходит по-любому. А если этого нет в продакшене, то и не нужен этот код в продакшен-ветке исходников. Пользователи не должны сидеть на ветке, которая тестируется.
sergejey писал(а):Ну не красиво немножко, это да, но не так критично, что прямо нельзя -- работает же :)
Ну конечно работает! сначало орёт благим матом в виде ошибки, которая так же подавляется в настройках конфига, а потом да, как-то работает. Причем на сообщение об ошибке и на его подавление также выделяются ресурсы.
Ну т.е. логика понятна. Проще включить подавление ошибок и предупреждений, вместо того, чтобы уделить всего минуту времени на исправление или сразу нормально написать.

Re: Программный код - качество и пояснения

Добавлено: Вт сен 22, 2015 3:42 pm
LutsenkoDenis
Файл: /modules/application.class.php
Ошибка: Нужно UPDATE вместо UPDAE

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

if ($tmp['ID'])
      {
         SQLExec("UPDAE users SET ACTIVE_CONTEXT_ID=0, ACTIVE_CONTEXT_EXTERNAL=0 WHERE ID='".$tmp['ID']."'");
      }

Re: Программный код - качество и пояснения

Добавлено: Вт сен 22, 2015 5:02 pm
sergejey
LutsenkoDenis писал(а):Файл: /modules/application.class.php
Ошибка: Нужно UPDATE вместо UPDAE
Ага, спасибо, исправил

Re: Программный код - качество и пояснения

Добавлено: Вт сен 22, 2015 11:27 pm
LutsenkoDenis
Файл: /lib/mysql.class.php
  1. Данная функция не всегда возвращает результат. По идее она должна в блоке где записывается ошибка возвращать пустой массив.
  2. Зачем в цикле каждый раз вычисляется кол-во строк данных из запроса к бд?

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

function Select($query)
   {
      if ($result = mysql_query($query, $this->dbh)) 
      {
         $res = array();
         
         for($i = 0; $i < mysql_num_rows($result); $i++) 
         {
            $rec = mysql_fetch_array($result, MYSQL_ASSOC);
            $res[] = $rec;
         }
         
         return $res;
      }
      else 
      {
         $this->Error($query);
      }
   } 

Re: Программный код - качество и пояснения

Добавлено: Вт сен 22, 2015 11:46 pm
sergejey
LutsenkoDenis писал(а):Файл: /lib/mysql.class.php
  1. Данная функция не всегда возвращает результат. По идее она должна в блоке где записывается ошибка возвращать пустой массив.
  2. Зачем в цикле каждый раз вычисляется кол-во строк данных из запроса к бд?
  3. Зачем в массив res записываются в цикле одни и те же данные?
1. Не должна. Ошибка выборки останавливает выполнение скрипта.
2. Да, наверное это лишнее
3. Шутите?

Re: Программный код - качество и пояснения

Добавлено: Ср сен 23, 2015 3:30 am
LutsenkoDenis
1. Должна, т.к.:
  • а) смотрим описание функции(написано если что не мной :) )
    Это публичная функция (access public), которая на вход принимает строковый параметр с запросом к бд(string $query) и возвращает массив(return array).
    /**
    * Execute SQL SELECT query and return all records
    *
    * This method returns records as array of assosiated arrays (by field names)
    *
    * @param string $query SQL SELECT query
    * @return array execution result
    * @access public
    */
  • б) Исходя описания выше, в случае ошибки функция должна вернуть пустой массив.
  • в) ошибка выборки... если имеется в виду это $this->Error($query); - ничего не прерывает. То что в ней return 1 ни о чем не говорит, т.к. далее нигде не используется.
2. Пробежался по коду на предмет таких-же вычислений...многовато :( Исправил и отправил pull-reqest.
3. Ага, шучу конечно.. ночь все-таки. Вообще я удалял 3-й пункт, но видать ответ был быстрее :)