php中json_decode解析bigint大数据的问题以及科学计数法的显示转换
如下php代码,对于json中的bigint大数字数据,在json_decode的一般解析出来后,得到的大数字是经过科学计数法展示出来的。再通过number_format进行转换输出发发现已经和原来的数据不一样的了。 echo'<pre>'; $test=array('id'=>'181601920729896967','name'=>'test'); echojson_encode($test);echo'<br>'; $json='{"id":181601920729896967,"name":"test"}'; $data=json_decode($json,true); print_r($data); $str=number_format($data['id'],0,'',''); print_r($str); $newdata=json_decode($json...[>>…]
thinkPHP中的插入转更新add方法及ON DUPLICATE KEY UPDATE写法
ONDUPLICATEKEYUPDATE经常能起到很好的简化作用,减少了先去查询然后再去更新的繁琐,同时也防止出现查询与更新之间出现其它业务进行写操作从而造成不良影响。在thinkphp中也有类似的功能,那就是其add方法: 我们在一个模型中增加一个updateByattrReplace方法: //允许覆盖数据 staticfunctionupdateByattrReplace($where,$data) { $all=array_merge($where,$data); returnM(static::$mName)->where($where)->add($all,$data,true); } &nbs...[>>…]
nginx响应504的超时问题及php的慢日志事宜
服务器最近偶尔报504,属于接口处理超时,排查在proxy服务器上发现部分接口在执行时有时达到了超时时间60ms,有的接口为59.999: 221.229.202.75--[15/Mar/2018:10:25:25+0800]api..com504176192.168.162.14:8060.000-504"-""-""-""GET/caindex?uid=866067031604590&scre=30&unet=1&operator=3&loc=DH.EGJIK%2CCCK.BKGCFE&active_id=1521074825304&areq=5&preload=0&card_id=13618&content_id=15231295&pageid=1&platf=andid&g=31&mtype=h...[>>…]
php中测试使用beanstalk消息队列的所有可用方法
beanstalk消息队列轻型但功能很强大,值得一看,今天把它的方法再次完整熟悉了一遍。示例的php代码文件下载地址:beanstalk所有方法php示例代码下载php端的消息生产的PHP程序文件代码如下: require_once'Beanstalk.php'; $beanstalk=newSocket_Beanstalk(array( 'persistent'=>false,//是否长连接 'host'=>'192.168.168.8', 'port'=>11300,//端口号默认11300 'timeout'=>3//连接超时时间 )); #通过connect方法判断是否已连接 print_r("n---------通过connect方法判断是否已连...[>>…]
php安装beanstalk扩展连接beanstalkd消息队列的运用
关于beanstalk之前有文章:beanstalkd消息队列服务端的安装:http://www.04007.cn/article/249.html以及php里关于beanstalk扩展的安装,http://www.04007.cn/article/296.html这里有两种方式,我使用的是第二种connect方法连接服务端,并使用php安装扩展不采用php类文件。 当前已安装好beanstalk的php扩展,使用使用php程序: $beans=newBeanstalk(); print_r(get_class_methods($beans)); print_r($beans); 打印出的安装的Beanstalk扩展可使用的方法如...[>>…]
关于sphinx里使用SetSelect进行复杂的条件过滤或复杂查询
sphinx提供了filter过滤以及通过关键词进行query查询,但简单的query一个关键词并不能满足我们的查询要求,filter并不能支持复杂的逻辑组合运算,过滤条件都只是多重的叠加,即AND操作,并不支持。比如我们有很多文章内容及其它属性已经建好索引,如果要在一次查询中实现查询今天发表的新闻和昨天发表的非新闻文章中带有关键词新闻的内容查询出来。如果使用filter的话就没法处理了,因为filter即不能用于过滤文章类别,也不能用于过滤发表时间。 可见sphinx的filter...[>>…]
php连接sphinx的长连接事宜以及sphinx的排除查询
在使用php连接sphinx时,默认的sphinx连接非长连接,于是在想php连接sphinx能否进行一些优化: 方法:publicboolSphinxClient::open(void)—建立到搜索服务端的持久连接。此函数没有参数。成功时返回TRUE,或者在失败时返回FALSE。在网上了解到php调用sphinxapi进行长连接时,并不是我们想象中的那样会在php-fpm的fastcgi状态下一直与sphinx的searchd进程保持长连接,sphinx的api接口中open()方法仅仅提供了在一次会话请求中保证多个sphinx调用在单个php进程中是共用...[>>…]
php调用sphinx可用的所有API方法列表及介绍
一、通用API方法GetLastError(错误信息)原型:functionGetLastError()以可读形式返回最近的错误描述信息。如果前一次API调用没有错误,返回空字符串。任何其他函数(如Query())失败后(函数失败一般返回false),都应该调用这个函数,它将返回错误的描述。GetLastWarning(告警信息)原型:functionGetLastWarning()以可读格式返回最近的警告描述信息。如果前一次API调用没有警告,返回空字符串。SetServer(设置搜索服务)原型:functionSetServer($host,$port)设置searchd的主机名和TCP端口。此后的所有请求都使用...[>>…]
一次上线碰到的502问题及php异常追踪
今天在上线时遇到了一些502报错,但并非大量,在上线后的几分钟里报了个几十条,程序中已经使用了register_shutdown_function方法捕获最终的异常并进行报错记录,但这次发生502时,PHP程序根本未记录任何错误。查看web里的nginx报错日志如下: 2017/12/2617:03:00[error]11589#0:*202518654recv()failed(104:Connectionresetbypeer)whilereadingresponseheaderfromupstream,client:192.168.168.164,server:04007.cn,request:"GET/search/AF04A6B6C9B45D9624514HTTP/1.1",upstream:"fastcgi:/...[>>…]
开发中遇到的gzuncompress,DomDocument等几个小问题记在此
一,昨天在命令行模式行运行一个很复杂的程序,一开始执行php,刚刚连接数据库,都没怎么查几条记录,就报错:Fatalerror:Allowedmemorysizeof134217728bytesexhausted(triedtoallocate20480bytes)in..。一开始看到这报错,还真是一头雾水,因为我这个程序正常运行出现内存溢出是完全可能的,因为会进行百万级的数据库查询,并且要生成几百M的数据文件出来,但目前我只是在调试程序,暂时还不应该出现这种报错啊。然后再一看不对啊,报错提示允许内存128M,我这才申请多大点内存,怎么报错呢。使用php--ini查看所使用...[>>…]