Re: Неправильные (огромные) значения $request time для FastCGI-запросов

Maxim Dounin mdounin at mdounin.ru
Mon Sep 2 01:16:01 UTC 2013


Hello!

On Sat, Aug 31, 2013 at 04:50:28PM -0400, sofiamay wrote:

> А что, за год баг так и не исправили? Разрабы даже не удосужились здесь
> отписаться? Баг хотябы в багтрекере висит?
> Подтверждаю, у меня тоже $request_time выдаёт бред:
> 
> 240648971536.2381542
> 240648971536.2381542
> 240648971536.2381542
> 240648971536.2381542
> 240648971536.2381542
> 
> Одно и то же для многих запросов подряд, потом опять на другой бред меняет!
> Когда это исправят? Зачем в Nginx сделана переменная $request_time если она
> показывает всякий бред, мне думается её нужно убрать, а через несколько лет,
> когда разрабы соизволят исправить баг, вернуть. Пока же от неё больше вреда
> чем пользы. 
> 
> P.S. Использую Windows и PHP как FastCGI. 

Я даже и не знаю, что вам сказать.  Привыкайте - это open source.  
Тут вам никто ничего не должен, и править вылезающие у вас баги - 
вам.  Надеяться, что кто-то придёт, и за вас исправит, тем более 
на Windows - по меньшей мере наивно.

Впрочем, патч:

diff -r 683283f8b5fd src/http/modules/ngx_http_log_module.c
--- a/src/http/modules/ngx_http_log_module.c	Thu Aug 29 20:39:13 2013 +0400
+++ b/src/http/modules/ngx_http_log_module.c	Mon Sep 02 04:38:34 2013 +0400
@@ -780,7 +780,7 @@ ngx_http_log_request_time(ngx_http_reque
              ((tp->sec - r->start_sec) * 1000 + (tp->msec - r->start_msec));
     ms = ngx_max(ms, 0);
 
-    return ngx_sprintf(buf, "%T.%03M", ms / 1000, ms % 1000);
+    return ngx_sprintf(buf, "%T.%03M", (time_t) ms / 1000, ms % 1000);
 }
 
 
diff -r 683283f8b5fd src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c	Thu Aug 29 20:39:13 2013 +0400
+++ b/src/http/ngx_http_variables.c	Mon Sep 02 04:38:34 2013 +0400
@@ -1992,7 +1992,7 @@ ngx_http_variable_request_time(ngx_http_
              ((tp->sec - r->start_sec) * 1000 + (tp->msec - r->start_msec));
     ms = ngx_max(ms, 0);
 
-    v->len = ngx_sprintf(p, "%T.%03M", ms / 1000, ms % 1000) - p;
+    v->len = ngx_sprintf(p, "%T.%03M", (time_t) ms / 1000, ms % 1000) - p;
     v->valid = 1;
     v->no_cacheable = 0;
     v->not_found = 0;

-- 
Maxim Dounin
http://nginx.org/en/donation.html



Подробная информация о списке рассылки nginx-ru