У меня есть этот код внутри обработчика выхода в пользовательском модуле:
$diff = round(((microtime(true)-$script_start_time)*1000));
watchdog('thaty', $diff);
if(variable_get('thingy', 0) == 1) {
$data = array(
'q'=>$_GET['q'],
'memory'=>memory_get_peak_usage(),
'execution_time'=>$diff
);
db_query('INSERT INTO {blah} (q,memory,dt,execution_time) VALUES (\'%s\',%b,UNIX_TIMESTAMP(),%b)',$data);
}
Значение $ diff иногда постоянно сохраняется в базе данных как 2147483647, что является значением переполнения для INT, я полагаю, в PHP. Когда я регистрирую значение через сторожевой таймер, я могу подтвердить, что оно не установлено на 2147483647, а на реальное значение, которое представляет собой целое число из трех цифр.
Типичные значения (подтвержденные при регистрации):
Столбец execute_time имеет тип int (11).
Я не могу найти источник этой проблемы. Вещи, которые я пробовал: