那些坑爹的小坑

1、session_start()

描述:前两天在做一个功能的时候,需要从6个地方获取不同的数据,最开始是发1个请求获取6条不同的数据,上线后发现超慢的!!!然后后来改成了发6个请求,发先然并卵,时常还报502,那么问题就来了,到底是为什么呢??除了第一份数据从mongo取得稍微慢一点之外(因为没有命中索引,直接全表扫描了200多万的数据),其他都是直接从数据库里取的,而且数据量很小。

原因:发6个请求获取数据的时候,由于每一个请求都重用了session会话,即每一个请求发起的时候都执行了一遍session_start(),而因为第一个请求从mongo取数据比较慢,session又有其独占锁(即这个请求如果没有处理完成的话,这个sessionid对应的文件就会被锁住,其他进程是没有办法调用到这个文件的,所以之后的5个请求都得等第一个请求完成之后,才能进行),所以其他5个请求等待时间很长,所有数据get得超慢,慢到动不了,就502了惊恐

解决办法:还是改成一个请求(减少session_start()的次数),优化第一个请求的时间(使用mongo索引),命中索引之后可以大大加快Mongo的查询速度,查询数据的时间可以缩短到1秒以内,一般是200-400ms,那么就bingo,问题解决啦~~~现在挺快的得意


2、count(false)  结果为1


3、php5.0.5以下$_REQUEST的值会受variables_order 指令的影响,php5.3以上的$_REQUEST的值会受request_order指令的影响 
   (1)如果环境是php5.6,设置的request_order为 EGP:$_ENV, $_GET, $_POST 
            就是说$_REQUEST的值按照EGP的顺序从后往前覆盖,$_REQUEST中也不会有$_COOKIE的值; 
   (2)如果环境是php5.2,既没有variables_order,也没有request_order,所以按照默认的顺

            序: $_GET,$_POST,$_COOKIE 
           的顺序覆盖$_REQUEST中相同键名的值,所以会受cookie的影响 


4、用http传递参数时,参数中的“+”号会被替换成空格,解决方案就是:

rawurldecode(urlencode(urldecode($str)))

因为:1、用urldecode将$str解码(参数可能已经被编码的情况下)

   2、用urlencode将$str中的“=”等编码成%+两位十六进制数

   3、用rawurldecode将$str中的%开头的字符转回来

  解码不能用urldecode的原因:php.net官网say ,  urldecode会将 + 号转回成 空格  T-T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值