What is going on

最近在线上进行nginx规则的调整的时候遇到一个问题,发现在location匹配时候可能会踩到的一个坑。 location在匹配规则的时候匹配的是归一化之后的URL,比如多个斜杠或者URL中带".", ".."的都会被 归一化。 而在内部rewrite的时候新的URL地址是不会再次被归一化的。这种不一致如果没有留意可能会遇到问题。 比如: if ($request_uri ~ "/api") { rewrite (.*) /newapi/$1; # 斜杠多余了 } location /newapi/api { set $testapi 1; } location /newapi { # ... } 对于上面的配置中,rewrite的时候不小心多写了个斜杠,对于这个配置, 如果用地址:/api访问的话 /newapi/api 这个location是不能被匹配的。 而用地址/newapi…

开始学习下Go语言,为了强化记忆开始记一些学习笔记。 Go语言是一门很简单的语言,它为我们做了很多的决定,比如很多在其他语言中 不推荐使用的编码风格在Go是不允许的。比如: 变量或者包声明或导入后没有使用是无法编译通过的。 它的编译只有Fatal没有Warning,这对于代码质量是很有好处的。在其他语言中 最佳实践也是编写warning-free的代码。Go把这个最佳实践放到了语言级别。 Go中的空标示符(blank indentifier): _ 刚开始在看到Go中的空标示符是以为它只是一种约定,因为下划线看起来比那么的 显眼,而普通变量又不太可能只使用一个下划线来命名,在其他语言中我们不想使用 一个变量的话很简单忽略之就可以了,而如果对一个函数的返回值不感兴趣的话, 不对返回值赋值即可。 先记录下结论:空标示符不是一个普通变量或标示符,而是一个特殊的标示符, 对于这种类型的标示符绑定表达式时不进行真正的绑定。 这是什么意思呢?也就说比如将一个值赋值给空操作符是不会进行值绑定的。 package main import ( _ "io" // 如果不重名名包为…

很开心,第一个提交的PHP扩展已经在PECL官方发布了,这是一个Google LevelDB的PHP 封装,主要用于对LevelDB的访问,目前已经实现了LevelDB最具价值的一些特性:迭代器,快照等。 LevelDB数据的设计是只能单进程访问的(多线程没有问题),所以通常这个扩展不合适作为普通的Web应用数据存储, 可以作为离线的数据存储用,或者只是方便读取现有leveldb的数据。 如果有需要可以前去 http://pecl.php.net/package/leveldb 下载。基本的使用说明在http://reeze.cn/php-leveldb/ 详细的API文档由勤劳高效的胖胖http://www.phppan.com/编写,不过还没有发布。 同时,[email protected]

好久没有更新了,发篇占位文:如果某个函数的默认参数是个常量,那么怎么样获取这个参数的常量名称?见代码: <?php function new_blog($title = DEFAULT_TITLE) { // blahblah } 在上面的代码中,怎么样获取函数new_blog函数的参数$title所对应的默认值常量名: DEFAULT_TITLE。这个问题和以前我曾写过的一篇 关于如何获取变量名称的博文相似。 这个问题,在PHP5.4.6之前基本上没有解决方法了,因为函数定义是编译时的信息,在PHP运行时是获取不到的。 当然这里说的无法实现是指的使用官方PHP版本时没法搞定。 在PHP中类似的需求,一般都可以使用PHP的反射扩展。 PHP的反射(Reflection) 反射是PHP5中提供的用于获取或操作PHP内部信息的标准扩展,可能写应用代码的用户使用的较少一些…

Travis CI是一个基于云的持续集成项目, 目前已经支持大部分主流语言了,比如:C,PHP,Ruby,Python, Nodejs等等。和Jenkins类似, Travis CI也是开源的,不过Travis和Github集成非常紧密,官方的集成测试托管只支持Github项目, 不过你也可以搭建一套自己的方案。 这里有一篇比较详实的对Travis-CI的介绍, 同时InfoQ上也有一篇关于Travic_CI的报道, 如果你有开源项目,那么Travis绝对值得一试,目前托管在Github上的大部分知名项目都使用了Travis来做集成测试。 比如Ruby语言的:Rails, Rack, Sinatra, RSpec, Cumber, Node.js, PHP的:Symfony2, Doctrine2, Zend Framework 2…

什么是NOP NOP 是一个特殊的opcode,表示空操作,在很多地方存在,汇编中的NOP含义也一样, 机器指令中的空操作通常用来将内存地址进行对齐,以提高CPU访问内存的效率, GCC等编译器也会将特定的语句进行优化而产生空操作。 PHP中的空操作opcode NOP: ZEND_NOP PHP基于Zend虚拟机,其他基于虚拟机的语言中大都会有类似NOP的指令, PHP文档有对此的简单说明: <?php /* * no operation * opcode number: 0 */ function A(){}; ?> /* VLD 的输出结果 */ line # op fetch ext return operands 6…

很久以前就不想继续使用Wordpress了,不太习惯在线写东西,开始返璞归真,比较喜欢 纯文本的内容创作方式,TIPI就使用的是markdown格式, 同时在终端也会让我更有写作的欲望。 翻了一下以前的博客,原来一共加起来也不足20篇。以此作为起点今后多继续更新博客吧。 TIPI的issue里还有很多的待处理工作,计划在7月份全部写完。这个始终是高优先级的。 最近给PHP修复了一些bug,也有一些feature被接受了。在这过程中对PHP的实现又有了一些更加深入 的理解。也有冲动想要写到TIPI里。总之,TIPI会一直更新。…

这不是一个配置ssh密钥建立信任关系免密码登陆的方法。 解决的是在终端下多次登陆同一主机需要多次输入用户密码的问题。 我们公司的内网环境比较特殊, 为了安全性做了各种认证, 联入网络需要准入一下,  准入需要使用密码+随即密码的方式认证, 是挺安全的, 可以对于我们来说其实很痛苦, 每次都要输入一下密码,因为包含了随机密码, 这就无法使用脚本来方便的自动准入.  我们连入公司的远程开发机需要通过一台特殊的服务器来将我们的登陆转发,  也就是登陆到中转机,然后通过中转机在ssh.同样登陆中转机也是需要这个随机密码的. 吐槽完毕. 工作中经常需要在多台服务之间ssh登陆, screen 是一个不错的选择,  不过有时候还是需要打开另一个窗口再次登陆, 这时我又得再次输入那个随机密码,  如果你使用Windows并且使用SecureCRT那你可以不用继续往下看了, SecureCRT可以简单的复制会话, 这个功能很贴心. 如果使用Linux&Mac OS那就继续往下看. 在 ~/.ssh/config 文件中加入 Host * ControlMaster…