K.H.
Deals
2016年4月22日星期五
中美
2015年11月9日星期一
一个失败的架构师
2015年9月17日星期四
使用Navicat管理SAE共享型Mysql数据库
SAE在国内PaaS方面可以说一直是处于领军地位的,如果想用PaaS平台,SAE是不错的选择。
SAE自带的phpMyAdmin版本可能无法满足一些用户的需求,很多人都希望能有个更好的工具来进行数据库管理,最近研究了一下用Navicat的http tunnel来连接SAE的数据库,最终捣鼓成功了,在这里分享给大家。
首先安装Navicat,在安装根目录找到ntunnel_mysql.php文件,将该文件放到自己的项目中,可以自由重命名。
然后对该文件的以下内容进行修改,大约在193行左右:
修改为:
注意将上面代码中的$username和$password定义成你自己想要设置的用户名和密码,这个只是做校验用,下面Navicat连接时会用到。修改好后就将文件上传至SAE,注意该文件要能被访问。
接下来就可以到Navicat里新增链接了,主机名和端口随便填即可,但不能为空,用户名和密码即为上一步的$username和$password,注意修改为自己设置的。
接下来在高级标签里选择使用高级连接,点击添加数据库,数据库名即为下图中红框标出来的部分,可以在SAE自带的phpMyAdmin的界面中看到。
在http标签中选择使用http通道,通道地址即为你项目中该ntunnel_mysql.php文件的路径。
最后点击连接测试,不出意外此时就能使用Navicat来管理SAE数据库了。
2013年7月11日星期四
PHP全局变量不能生效
1.PHP全局变量不能生效错误重现
问题出现在用我的简易框架时,在view中使用原来第三方定义好的函数时(此函数比较独立),下面模拟一下:
t1.php
- < ?
- run(); //执行
- function run(){
- include 'func.php';
- showGlobal();
- }
- ?>
func.php1
- < ?
- $vars = 'I am global!';
- function showGlobal(){
- global $vars;
- print('我使用全局变量:'.$vars);
- }
- ?>
很简单的两个文件(第一次发现问题时,远比这复杂,在一层层排错后,得出最少化的问题重现环境),func.php是定义好的第三方函数,该函数使用了一些全局变量,如果这时把这两个文件放在一起,执行一下t1.php,会发现showGlobal里的$vars是显示不出来的,global失效了?
2.PHP全局变量不能生效错误原因
搜索后发现,php.net上很早就有人提出过,也有人给出了解释:
原来,在t1.php的run函数中include func.php时,func.php中的变量$vars的作用域只是在run之内,而在showGlobal中使用global声明的$vars是要求属于t1.php的不是run函数的,所以为空)
3.PHP全局变量不能生效解决方法
知道原因后,解决就很简单,可以把include 从run中移出来,这样,func.php中的$vars就属于t1.php了;也可以在run里用global声明一下$vars,这样也可以把原来属于run的$vars声明为全局(属于t1.php);
虽然问题可以简决,但用起来还是很不爽, 因为在我的phpec框架中,include的情况比较普遍,不可能把view中按需include的移到外层去,使用global的话,我在使用第三方函数时,又不会也不想去了解它用了什么全局变量,而且,层次结构一多,就….
PHP全局变量不能生效的原因总结:
1)尽量减少多级和函数中include文件.
2)尽量不用全局变量
2013年3月11日星期一
nginx+cgi解析php容易出现的漏洞的分析
标题有点大,当我们仔细分析后,实际上一般都是配置问题。
2013年2月10日星期日
神贴啊。。。
年费:
经典版主卡3600元/年,附属卡2000元/年。主卡可用10000积分兑换3600元年费,附属卡可用5000积分兑换2000元年费。
精致版主卡800元/年,附属卡300元/年。一年刷卡80000元免年费。
招行刷卡20元积1分,但是未必经典版的条件更高,因为招行经常有一些积分翻倍活动。
精致版的80000元消费包括无积分消费,如淘宝。
经典版赠送贵宾待遇,而精致版需要积分兑换这些贵宾待遇,
综合考虑,我选择了经典版。
成本分析(1张主卡+1张附属卡):
1. 按名义年费:5600元/年。不考虑。
2. 按最大成本获得15000积分:取现30万(2000元/次x150次),手续费3000元,1天的利息150元,合计3150元。
3. 招行有一些积分翻倍活动,加上平时刷卡,所以成本一定小于3150元,为了卡友利益,不便详述。
4. 按积分价值(机会成本):按20积分=1元。虽然兑换DQ冰激凌15:1,多样屋(感觉比较贵)15:1,看电影15:1等,最当钱用的是百盛购物25:1。招行20:1与他行400:1的价值是基本相当的。他行积分兑换超市购物卡,手机充值卡一般需要500:1。15000积分相当于750元。
5. 按积分价值(机会成本):按15积分=1元。有些朋友喜欢DQ、电影、多样屋,或是里程兑换合理,可以用到15:1,15000积分相当于1000元。
所以成本按1000元,方法对头,不怕麻烦,会更少。
贵宾待遇:
1. 体检:按350元/人次x2人,合计700元,下详述。精致版可用7000积分兑换1次。
2. 洗牙:按150元/人次x2人,合计300元,下详述。精致版可用3000积分兑换1次。
3. 三甲医院预约挂号:按100元/人次x1次,合计100元,下详述。精致版可用2000积分兑换1次。
4. 机场贵宾厅:按100元/人次x4次,合计400元,下详述。精致版可用3000积分或150元兑换1次(这也说明了积分20:1的合理性)。
5. 航空意外险:1500万,按100元,下详述。
6. 旅行不便险。
7. 生日当天消费积分10倍。订酒店积分10倍。
8. 额度较高,5+X万。
9. 在银行不用排队。
10. 客服电话直接转人工,不需输入卡号密码选择键。
其它一些我用不上,如高尔夫、租车等。综合起来,办白金卡还是值得的。唯一不确定的是是否年费兑换标准会不会提高,积分活动会不会变少或有限制。
体检:
招行办卡的业务员介绍的是美兆,说机器比较新。KVSKY兄推荐了望族国宾。因为当时自己已经预约了美兆,而且考虑到美兆是对体检者作档案的,可以前后对比,所以就决定在美兆进行初次体验。4月初预约的,因为我们只有周末有空,而周末人又比较多,所以约在了4周以后的周末。
美兆在北京、台湾、香港、马来西亚都有分店,上海店是2009年5月刚成立的。总体而言,作为专业的健检机构,美兆在环境、设备和服务态度上都很不错,比在公立医院的感受要好。只是价格很贵,如果自费的话,我还是会选择公立医院。
据招行的业务员介绍,体检价值1000元,当然,招行与美兆谈的价格一定没这么高,按照招行一些积分兑换礼品的价值,我们自购的价格可能是招行标注“市场价”的一半,所以我本来认为价值约500元,后来进行进一步的比较,认为该价格还会再低一些。
美兆实行会员制,“成人综合健检”115项,首次需交4000元,其中2000元为入会费,另2000元可以得到原价4000元的该套餐,以后每次体检2000元,我们可以认为,该套餐为2000元。美兆也有1000元的“至亲体检礼卡”和2000元的“至爱体检礼卡”,我们属于招商银行在美兆的团体会员。在淘宝可以找到美兆的体检产品,但都是上述的1000元与2000元,好像其价格是坚挺的。但是慈铭的体检卡可以5折在淘宝买到。回到美兆,2000元套餐的项目与我们招行套餐相差较多,不便比较。
比较一:1000元的“至亲”与招行套餐:“至亲”比招行多这几项:血脂检查中的高密度脂蛋白-胆固醇、低密度脂蛋白-胆固醇、CHOL/HDL-C比值,肝炎筛检中的乙肝表面抗原、乙肝表面抗体,癌症筛检中的甲胎蛋白、癌胚抗原,以及眼压、血氧饱和度等。
比较二:华山医院400元的团体体检项目,在其他项目与招行套餐基本一致的情况下,多了癌症筛检中的甲胎蛋白、癌胚抗原。
如果加100元选择招行的“男性套餐”,会增加心肌功能检查的肌酸激酶,血脂检查的高密度脂蛋白-胆固醇、低密度脂蛋白-胆固醇、CHOL/HDL-C比值。
从网上搜索的资料看,甲胎蛋白和癌胚抗原的定性检查价格约20-30元,定量检查约80-90元。姑且认为华山医院是定量的,那么扣除该2项的价格为320元,而因为是团体体检会有优惠,如果是个人,可能价格会略高些。再因为美兆的价格本来就比公立医院贵些,所以我推论,招行体检的使用价值差不多为350元。
不过,刚才看到,望族国宾的体检项目包含乙肝两对半以及甲胎蛋白、癌胚抗原。可以考虑明年去那体验一下。在淘宝上,国宾类似的套餐,价值600元,250元可以买到。
参考资料:
华山医院:http://www.huashan.org.cn/tijian.htm
39健康网:三甲医院体检价格(不过找到是深圳的,做为参考):http://sz.39.net/jktj/081/24/236229.html
洗牙:
4月初预约,也是只有周末有空,但周末人很多,约在4周后的5月8日,瑞尔齿科新天地店,后来新天地点排满了,要到6月,就改在5月22日的正大广场店。
约在下午2点,因为某些原因,2点50才到,偏偏手机还忘记带了,人家打我2次电话没打通。到了那里,拍了X光,但是说洗牙还不及了。因为医生3点、4点的预约都满了。老婆的医生5点有空,而我要下次再约时间。我们在商场逛了一会,后来,我的医生结束比较早,5点的时候打我老婆电话让我可以去。
洗牙时间约12分钟。以前在徐家汇的仁爱医院和长宁区中心医院洗过,仁爱医院200元,长中心100元。时间上长中心感觉和瑞尔差不多,印象中仁爱25分钟左右(仁爱洗牙的医生都是年轻的MM,长的不错,也挺温柔的)。可能在仁爱是第一次洗牙,比较费时间。在瑞尔,可能没有在约定时间去,所以时间被压缩了。但是起先医生建议改天时说,要么改天,要么马虎一点洗一下,但是马虎地洗没什么意思,所以后来洗的12分钟应该就算不马虎了吧。。
在瑞尔的价格单上,挂号费100元(只收一次),洗牙(瑞尔叫洁治)400元,拍X片200元,抛光300元。那天刚好有人在前台咨询,洗牙的初次费用是500元(400洗牙+100挂号),以后再洗就是400.我问了有没有折扣,回答是招行白金客户85折。而在淘宝,瑞尔价值800元的2次洗牙卡,120元就可以买到。在大众评论网上看到,有人也是网上买的折价卡,洗了45分钟,莫非我有人品问题?
综上,根据本次的体验,我觉得招行在瑞尔洗牙的使用价值差不多为150元。
三甲医院预约挂号:
每卡每年最多3次,2张卡为6次,但一般不会用那么多,只按1次计。
机场贵宾厅:
每卡每年最多6次,2张卡为12次。其实在大厅候机也没什么不好,所以实际使用次数及价值均按较低值。使用建行PP卡去国内机场贵宾厅的费用是16.50美元,国际机场(如浦东、港澳)要19.75美元。
交通意外险:
飞机1500万,火车轮船地铁100万,汽车40万,但是要求信用卡购票。平安保险1个月的交通意外险,20元保100万飞机,50万火车,5万汽车。保1年的费用是100元。考虑到平安不限制信用卡购票,其保障范围宽很多;另一方面,1500万与100万对于家人的意义是差不多的,只是安排身后事而已,对家人再尽一点照顾。不过,相信没人希望获赔。
旅行不便险:
我觉得这个险种挺好,但是要求延误4小时以上才能获赔(500-2000元)。而我遇到的,都是延误2-3小时。
里程兑换:
里程兑换是招行白金卡的一个亮点,比兑换礼品更实用。一方面,招行时常有一些积分活动,另一方面,招行白金卡折算消费额与里程的兑换比例是15:1,这在信用卡中是比较高的。当然,有些联名信用卡的比例也有15:1-18:1的,但是那是定向的航空公司。用普卡或金卡对非定向的航空公司兑换,一般是18:1-20:1。也有些商旅类的白金卡,兑换比例可达6:1,但是年费标准比招行高。我觉得可以尝试的是交行东航卡,是12:1。
最近(2010年5月),招行调高了兑换标准,15:1是新的标准,即1500积分兑换2000里程,之前是1200积分兑换2000里程。11000里程可以兑换800公里x往返的机票的。当然,平时的机票是可以打折的,我们不能都按原价比。我们要选择在节日期间兑换,这样使用价值更高,或者选择一些不太打折的航线,比如我发现上海去黄山和九寨沟基本不打折。还有,尽量选择远程的,尽量选择往返票。
国内航空公司免费机票兑换所需里程(经济舱往返程):
(因为字数限制,编辑的内容只能放在第27楼了,用了20多个小时,相信是有用的,请关注!)
比较特殊的旅行地:
九寨沟:国航兑换其它地方不占优势,但是飞九寨沟只有国航的航班,32000里程兑换往返程。如果用上航积分兑换国航机票则需要40000里程。
香港:只有东航和海航是按与国内城市一样算距离,均为26000里程兑换。但是从上海出发只有东航和上航的航班。
我推荐的几个地方(上海出发),按折扣票的性价比依次为(折扣价参照携程查询结果):
九寨沟:4320元,32000里程,135元/千公里;
威海,1400元,11000里程,127元/千公里;
黄山:1160元,11000里程,105元/千公里;
拉萨:2740元,32000里程,86元/千公里;
丽江:2680元,32000里程,84元/千公里;
武夷山:920元,11000里程,84元/千公里;
西双版纳:2480元,32000里程,78元/千公里;
西宁:1860元,25000里程,74元/千公里;
乌鲁木齐:2120元,35000里程,61元/千公里;
深圳:1180元,22000里程,59元/千公里;
北京:1100元,22000里程,55元/千公里;
成都:1220元,25000里程,49元/千公里。
当然,我查到的未必是最低价,而且,会有很多好的地点没有包括在内。大家评价的方法是:根据不同航空公司的里程兑换标准,以及在一段时间内的机票价格和自己的时间,来判断兑换的性价比。
上海航空 | 南方航空 | 东方航空 | 中国航空 | 海南航空 | |
<600 km | 11000 | 12000 | 15000 | 15000 | 14000 |
601-800 km | 11000 | 12000 | 22000 | 22000 | 14000 |
801-1100 km | 22000 | 20000 | 22000 | 22000 | 20000 |
1101-1200 km | 22000 | 20000 | 22000 | 26000 | 20000 |
1201-1400 km | 22000 | 20000 | 26000 | 26000 | 23000 |
1401-1500 km | 25000 | 20000 | 26000 | 26000 | 23000 |
1501-1600 km | 25000 | 20000 | 26000 | 32000 | 23000 |
1601-1700 km | 25000 | 20000 | 26000 | 32000 | 26000 |
1701-1800 km | 25000 | 30000 | 26000 | 32000 | 26000 |
1801-2000 km | 25000 | 30000 | 35000 | 32000 | 26000 |
2001-2200 km | 32000 | 30000 | 35000 | 36000 | 32000 |
2201-2500 km | 32000 | 30000 | 35000 | 36000 | 32000 |
2501-3000 km | 32000 | 30000 | 35000 | 36000 | 32000 |
>3000 km | 52000 | 60000 | 35000 | 36000 | 50000 |
上海-港澳(1700km) | 36000 | 50000 | 26000 | 50000 | 26000 |


2012年11月14日星期三
BOM!!!
BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉弱编辑器(记事本)当前文件采用何种编码,方便编辑器识别。
PHP在设计之初,没有考虑到BOM头的问题,因此很容易因为BOM头引发诡异的问题,比如编码转换失败,样式错乱等等问题,而且此问题相当隐蔽,很难确定发生问题的文件(试想在没有工具的情况下从上万的工程文件中找到哪个文件带有BOM头)。
BOM头是隐藏字符,非编辑字符,就像普通空文件一样,当我们写<?php的时候其实之前已经加了BOM头,如下(file.php):
- {BOM头}<?php
- .....
当file.php被其他文件包含时,由于BOM头在php标签外,会当作输出内容输出到浏览器,然后引发问题(如果用gbk察看 会看到三个乱码的字符)。
所以我们在开发过程中,得创建不包含BOM头的UTF8文件,具体见编辑器设置。对于上传文件,用代码截取BOM头即可
- if ( substr( $data, 0, 3 ) == "\xEF\xBB\xBF" ){
- $data=substr_replace( $data, '', 0, 3 ) ;
注意:在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。