博客广场

Nginx + PHP CGI的一个可能的安全漏洞
现在普遍的Nginx + PHP cgi的做法是在配置文件中, 通过正则匹配([Nginx(PHP/fastcgi)的PATH_INFO问题]())设置SCRIPT_FILENAME, 今天小顿发现了一个这种方式的安全漏洞. ...
shell下发推脚本
Be Lazy, 懒得能不动鼠标, 就不愿动鼠标.. 今天在推上看到有人的下面缀着"via bash", 好奇怎么做到, 找来推的API, 其实挺简单.. 请参看最新的bTwitter. 直接上代码, 不...
BTwitter(Twitter In Bash)
完成了第一版的bTwitter, 完美支持linux命令行下使用推特. 有几点要说明的: ``` 1. 脚本假设终端是UTF-8的, 如果不是, 请自行iconv之类的. 2. 脚本中in_reply_to, 不知...
PHP类型转换相关的一个Bug
PHP为了避免数字索引和数字字符串索引(注1)的混乱, 引入了zend_symtable_*系列函数, 并应用于数组中. 这样一来, 数字字符串索引也就会被当作数字索引, 然而总是有一些情...
PHP错误抑制符(@)导致引用传参失败的Bug
今天cici网友发来一个问题, 说是在函数调用参数前面使用错误抑制符号(@)的时候, 貌似引用传参就失效了. 他想让我帮他解答为什么. 看下面的例子: ``` <?php $array = arr...
深悉正则(pcre)最大回溯/递归限制
今天,Tank问了一个问题, 对于如下的正则: ``` /<script>.*?<\/script>/is ``` 当要匹配的字符串长度**大于**100014的时候, 就**不会**得出正确结果: ``` $reg = "/<scri...
深入理解PHP之匿名函数
PHP中, 传递Callback的方式, 一直很丑陋. 在PHP5.3以前, 我们只有俩种选择: ``` 1. 字符串的函数名 2. 使用create_function的返回值 ``` 在PHP5.3以后, 我们多了一个选...
PHP调试技术手册发布(1.0.0 pdf)
黑夜路人前段时间, 本着分享/总结的精神, 计划要总结下PHP常用的调试技术, 就一些问题找到了我.. 如今第一版的PHP调试技术手册已经发布. 冠以我名, 我甚感惶恐, 只能一...
ReflectionFunction(Method)引用参数导致Invocation failed
今天同事反馈一个问题, PHP5.2.x在使用反射做函数包装的时候, 得到"Invocation failed"的异常, 而使用call_user_func代替则不会, 原逻辑太复杂, 经过精简以后可重现异常...
定制自己的PHP语法-在PHP中实现unless
首先 ,插一句题外话: 从我发表第一篇PHP执行原理的文章到现在, 已经快2年了, 我很高兴的看到这俩年里PHP中文圈里 ,越来越多的人开始研究PHP源码, 也有越来越多的人开始...
终于搞定了IE6下的显示
之前就有博友跟我说, 我的blog在IE6下页面乱了. 一直懒得弄, 今天有点时间, 打算调整下. 找了半天, 罪魁祸首原来是我给pre设置的左边框, 具体原因我还不知道.. 有知道同...
PHP运算符优先级的一个例外
今天在老王的技术手册看到一个问题: ``` <?php if ($a = 100 && $b = 200) { var_dump($a, $b); } ``` 输出是什么? 这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不...
注意PHP对字符串的递增运算
有同学问了一个问题: ``` <?php for($i = 'A'; $i <= 'Z'; $i++) { echo $i; } ``` 输出是啥? 输出是: > ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFAGAHAIAJAKALAMANAOAPA...
深入理解PHP原理之异常机制
PHP的异常机制的原理是什么? 在PHP每一个可独立执行的op array最后的ZEND_HANDLE_EXCEPTION是用来干什么呢? 让我们从一个问题说起, 上周的时候, blue5tar提了一个问题:"...
将PHP Manual融入(g)Vim
首先说个题外话: Vim发布7.3了.. 在翻看Vim插件的时候, 发现了一个比较有意思的应用(非插件): 把PHP的手册融如Vim中, 在Vim中, 按"K", 就可以跳转到光标下函数的手册说...
Yaf-一个PHP扩展实现的PHP框架
快有一个月没有更新Blog了, 一来是最近项目比较紧张, 二来就是在忙着开发Yaf(Yet another Framework) 一直以来, 我研究PHP的内核, 虽然有文章不少, 但却鲜有一些借助这...
PHP stream未能及时清理现场导致Core的bug
同事发现一个在使用set_error_handler的时候, 能100%重现的core, 提炼后的重现代码如下(**环境必须不能访问internet**): ``` <?php function err_handler(){ exit; retu...
PHP的命名空间的实现
PHP的命名空间, 实现的还真是简单. 当你有如下代码: ``` <?php namespace Yaf; class Application { } ``` 其实就相当于, 你声明了一个名字为A\B的类, 当然, 你不能直接...
AllowEncodedSlashes in Apache
对于Apache来说, 如果URL和PATH_INFO中出现%2f(/)或者%5c(\), 会被认为这是个不合法的请求, Apache将会直接返回404结束. 对于使用mod_rewrite做URL改写的情况来说, 可能...
Mpass - PHP做Socket服务的解决方案
一般很少有用PHP做服务的, 但是如果你的已有业务逻辑都是PHP实现的, 而现在却需要基于已有的业务逻辑提供一套Socket服务, 怎么办? 当然, 解决方法很多, 但最简单的办法,...