分类 代码分析 下的文章

require_once导致的一次Bug

代码如下:

public function test($table) {
    require_once ROOT_PATH . '/config/db.config.php';
    $result = false;

    if (!$DB_CONFIG[$table]) {
        return $result;
    }

    // 代码省略
}

上线后发现test方法没执行,加断点调试后发现走到这里的if判断里直接return掉了。
断点调试,发现$DB_CONFIG为NULL,这是什么灵异的问题。

检查代码后,发现是由于require_once导致的。
这里如果在函数外其他地方加载了db.config.php文件,这里就不再加载这个文件,导致$DB_CONFIG这个变量为空。
改为require后恢复正常。

总结

对于配置文件,不要使用require_once进行加载。
另外也不推荐使用require_once进行文件加载,具体见《再一次, 不要使用(include/require)_once》

phpMyAdmin 4.2.x 修改了导出数据库的格式

表test结构说明

字段名说明
key主键,自增
value

导出后的sql

--
-- 表的结构 `test`
--

CREATE TABLE IF NOT EXISTS `test` (
  `key` int(11) unsigned NOT NULL,
  `value` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `test`
--
ALTER TABLE `test`
 ADD PRIMARY KEY (`key`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `test`
--
ALTER TABLE `test`
MODIFY `key` int(11) unsigned NOT NULL AUTO_INCREMENT;

可以看到这里主键和自增都是单独的命令了。

搜索到的相关资料:http://www.v2ex.com/t/123883

escape/encodeURI/encodeURIComponent的区别

示例

先看一个例子:

var string = '~!@#$%^&*(){}[]=:/,;?+\'"\\';
console.log(escape(string) + '\n' + encodeURI(string) + '\n' + encodeURIComponent(string));

输出结果:

%7E%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%2C%3B%3F+%27%22%5C
~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+'%22%5C
~!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%2C%3B%3F%2B'%22%5C 

区别

escape() will not encode: @*/+
encodeURI() will not encode: ~!@#$&*()=:/,;?+'
encodeURIComponent() will not encode: ~!*()'

参考资料

http://jotcmd.com/96/escape-encodeuri-compare/
http://xkr.us/articles/javascript/encode-compare/