Страница 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
- Данная функция не всегда возвращает результат. По идее она должна в блоке где записывается ошибка возвращать пустой массив.
- Зачем в цикле каждый раз вычисляется кол-во строк данных из запроса к бд?
Код: Выделить всё
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
- Данная функция не всегда возвращает результат. По идее она должна в блоке где записывается ошибка возвращать пустой массив.
- Зачем в цикле каждый раз вычисляется кол-во строк данных из запроса к бд?
- Зачем в массив 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-й пункт, но видать ответ был быстрее
