奇葩问题解决的原则

1.首先心理上承认程序是有问题的;

2.断点调试,测试各个可能出现问题的环节;

3.不要在上线的项目中测,要新建一个测试页,测试通过后再修改线上的版本;

4.可以去网上查查别人有没有遇到类似的情况,进行借鉴;

5.如果一个问题纠结了半个小时都没有解决,则就要向他人求助,实在不行,则暂且放一放,或许过段时间再看,就知道怎么解决了,不能在一棵树上吊死,记住:时间是宝贵的!

6.有时,用一些第三方的插件在ubuntu下老出现一些奇葩的问题,但是在windows下是正常的,此时就不能在ubuntu上死抠,要换一种思路,去windows上试试!以免浪费时间!

json格式转数组注意事项

今天遇到一个特别奇葩的问题,json格式明明是正确的,转数组时却就是出不来,后来才发现是文件的编码问题,文件的编码一定要是utf-8无BOM格式,这点一定要切记!切记!

如果想确认json是否正确http://www.kjson.com/

json格式的城市:

<?php
$json = '{
 "北京": {
 "key": 11,
 "defaultvalue": 1,
 "values": {
 "东城区": 1,
 "西城区": 2,
 "崇文区": 3,
 "宣武区": 4,
 "朝阳区": 5,
 "丰台区": 6,
 "石景山区": 7,
 "海淀区": 8,
 "门头沟区": 9,
 "房山区": 11,
 "通州区": 12,
 "顺义区": 13,
 "昌平区": 14,
 "大兴区": 15,
 "怀柔区": 16,
 "平谷区": 17,
 "密云县": 28,
 "延庆县": 29  //注意:此处不能有逗号,否则会出错
 }
 }
}';
print_r(json_decode($json,true));//第二个参数true表示强制转成数组

注意事项:json_decode($json,true)中$json的编码必须是utf-8,不是的要用 iconv(‘GB2312’, ‘UTF-8’, $json)转换。

CGI模式下的bug

一般情况下$_SERVER[‘PHP_SELF’]  与 $_SERVER[‘SCRIPT_NAME’]  没有什么区别,但是如果PHP是以CGI模式运行的话两者就有差异

建议使用$_SERVER[‘SCRIPT_NAME’]

以下是有bug的代码

// 当前文件名
 if(!defined('_PHP_FILE_')) {
 if(IS_CGI) {
   //CGI/FASTCGI模式下
   $_temp = explode('.php',$_SERVER['PHP_SELF']);
   //有问题,应该将$_SERVER['PHP_SELF']改成:$_SERVER['SCRIPT_NAME']

 define('_PHP_FILE_',rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/')); 
}else{
 define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/')); }
}