почему время () - $ _ SERVER ["REQUEST_TIME_FLOAT"] отключено на 1 секунду в php-cli? - PullRequest
1 голос
/ 29 июня 2019

при запуске php-cli версии 7.3.4 для Windows и 7.3.6 для Linux, уравнение time()-$_SERVER["REQUEST_TIME_FLOAT"] выглядит достаточно устойчиво на 1 секунду. Почему?работает php -r 'sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);', я получаю число 3.X, я ожидал, что это всегда вернуть число> = 4, почему я получаю 3.x числа?

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(getrusage()["ru_utime.tv_sec"]);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);'
int(0)
float(3.1129999160767)

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(getrusage()["ru_utime.tv_sec"]);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);'
int(0)
float(3.3659999370575)

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);'
float(3.3789999485016)

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);'
float(3.664999961853)

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);'
float(3.3450000286102)

hans@hans-lp17 ~
$ php -r 'function f(){sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);}f();'
float(3.2279999256134)

hans@hans-lp17 ~
$ php -r 'function f(){sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);}f();'
float(3.0420000553131)

hans@hans-lp17 ~
$ php -r 'function f(){sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);}f();'
float(3.539999961853)

hans@hans-lp17 ~
$ php -r 'function f(){sleep(4);var_dump(time()-$_SERVER["REQUEST_TIME_FLOAT"]);}f();f();'
float(3.0999999046326)
float(7.0999999046326)

1 Ответ

0 голосов
/ 29 июня 2019

.. очевидно, это проблема точности и округления, $_SERVER["REQUEST_TIME_FLOAT"] имеет микросекундную точность, а time () в 1000000 раз менее точна, чем, используя вместо этого microtime (true), мы получаем:

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]);'
float(4)

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]);'
float(4)

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]);'
float(4.0009999275208)

hans@hans-lp17 ~
$ php -r 'sleep(4);var_dump(microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]);'
float(4.0009999275208)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...