一个关于 PHP 奇怪的 Bug

2017-12-04 16:03:44 +08:00
 KasonPasser

一个应用的开始时间减去应用结束时的时间,小数点有时居然变成了逗号。

部分代码:

	$mtime =  explode(' ',  microtime());
	$app_starttime = $mtime[1] + $mtime[0];
    ///  程序主体的运行
    $mtime =  explode(' ',  microtime());
    $app_endtime = $mtime[1] + $mtime[0];

    $use_time = $app_endtime-$app_starttime;
    fb($use_time, 'exec time');

    if($use_time > 5){
        Yf_Log::log($use_time, Yf_Log::ERROR,'slow_slow_log');
    }
    else if($use_time > 1){
         Yf_Log::log($use_time, Yf_Log::ERROR,'slow_log');
    }
    else {
        Yf_Log::log($use_time, Yf_Log::ERROR,'access_log');
    }

记录的日志:


 	Dec 04 13:21:47 FILE=/data/www/www.xxx.com/index.php [error] 0.03904914855957
	{"ctl":"Index","met":"index","typ":"e"}
	#0 /data/www/www.xxx.com/index.php(211): Yf_Log::log(0.03904914855957,ERROR,access_log)

	Dec 04 13:21:48 FILE=/data/www/www.xxx.com/index.php [error] 0.11846590042114
	{"firstRow":"12","totalRows":"123","ctl":"Goods_Goods","met":"goodslist","act":"all","cat_id":"268","actorder":"desc","typ":"e","keywords":""}
	#0 /data/www/www.xxx.com/index.php(211): Yf_Log::log(0.11846590042114,ERROR,access_log)

	dic 03 23:25:05 FILE=/data/www/www.xxx.com/index.php [error] 0,018435955047607
	{"typ":"json","lang":"es_CR","ctl":"Buyer_Voucher","met":"getVoucherCount","__random":"0.6502593521184687"}
	#0 /data/www/www.xxx.com/index.php(211): Yf_Log::log(0,018435955047607,ERROR,access_log)

	dic 03 23:25:05 FILE=/data/www/www.xxx.com/index.php [error] 0,035964965820312
	{"typ":"json","lang":"es_CR","ctl":"Buyer_Index","met":"getAllCount","__random":"0.6859251245657769"}
2858 次点击
所在节点    PHP
8 条回复
enenaaa
2017-12-04 16:17:24 +08:00
microtime(true)
或者
$app_endtime = (float)$mtime[1] + (float)$mtime[0];

看看。两个字符串相加可能出幺蛾子。
picone
2017-12-04 16:31:49 +08:00
能看看格式化输出的地方?
很是诡异,正常的日志日期是 Dec 04xxxx
而不正常的日志日期是 dic 03xxxx
有可能是分支结构后面格式化输出的地方打错了?
KasonPasser
2017-12-04 16:41:30 +08:00
@enenaaa 添加了还是一样的。

@picone 这个我也注意到了,dic 是西班牙 语的十二月。但是同一个的程序的逻辑也会出现这种结果。
zgx030030
2017-12-04 16:50:13 +08:00
搜索后得知西班牙语小数点为逗号,是不是你网站切多语言? 查查 setLocale 的使用?
vex2
2017-12-04 16:54:02 +08:00
确定一下是否有 runtime 的 ini 设置。 还有比如 php-fpm 启动的 worker 使用的配置是不是不一样的。
huijiewei
2017-12-04 17:10:03 +08:00
"lang":"es_CR"

只要是逗号的里面的输出都有
KasonPasser
2017-12-04 17:38:44 +08:00
@zgx030030
@huijiewei 系统是有设置了多语言,但本地测试写死语言(西班牙语)也是正常的。
mingyun
2017-12-05 22:16:47 +08:00
怪异,楼主找到问题了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/411858

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX