陈松的Blog

coLinux

如果你还在为cygwin下build php失败或其他类似的问题而烦恼,向你隆重推荐很好用的coLinux,和vmware类似是虚拟机技术,而且是free的。我感觉非常稳定,速度也很快(比cygwin)。

这里有更好的教程
http://studftp.stut.edu.tw/~m9335203/colinux/colinux.html

我写的这个只是为了自己方便(每次安装都要读那么长的教程太痛苦了)总结了一个不用思考的step by step,基本上copy+paste每一行命令应该就应该能用了

预先准备

Be Lazy!

这是Rasmus教给我的最重要的东西。

那年Rasmus来北京参加DevCon,blah blah讲了不少。他那个presentation真够长的(不仅拿着它在全公司世界各地office巡演,我发现他又稍微改了一下就去参加linux conf au了,真是太不厚道了)

整个presentation的精义就在于两个字“Be Lazy”。

  • 不要试图解决不存在的问题
    许多人,虽然没有意识到,非常热衷于解决根本不存在的问题。比如:真的需要多国语言支持吗?真的需要完全用面向对象OOP吗?他们花了很多精力实现了这些美好的意愿,而是解决了根本不存在的问题!事实上,很多应用只需要用gb2312就足够了;而有些使用纯OOP的程序,除了降低效率以外,我也看不太出有任何意义。

最基本的cache

|

摘要:本文试图说服你使用不到10行代码的缓存提高你的web程序效率。

如果你已经写了一段时间的web应用,而且它们越来越大的时候,你就会注意到性能是个问题。当我们假设人工要比机器贵(在正规的公司,这通常是事实),作为工程师,我们就必须考虑到优化程序的效率。

在我的经历中,缓存(cache)往往比任何其他方式更能够轻易而有效地提高应用的性能。

当我们习惯把所有的数据放到数据库中的时候,我们通常假设数据库管理系统DBMS可以应对我们的要求。当你的应用因为访问量的不断增加而变得越来越迟缓的时候,90%的情况你会发现是因为数据库存在瓶颈。是的,MySQL非常的快,但这不是完全依赖它的很好的理由。你会发现,在脚本语言和数据库之间建立一个缓存机制是十分必要的。

Scanmus @ Paranoid Conference

因为一些原因没有去Paranoid Conference,Lucy回来告诉我,Rasmus在会议上就是拿中国的几个project做例子,其中居然就有我的大作,呜呜呜……看来这就是我轻视Scanmus(一个Rasmus闲来无事写得扫描XSS的工具)的恶果。

Security最基本的一些sense:

  • escape!
  • 尽量validate输入
    • 类型:数字,email,url
    • 范围:枚举,数字的范围,字符长度
  • 内部应用间的api限制外网访问

不值得信赖的addslash()和mysql_real_escape_string()

|

长久以来,我一直依赖mysql_real_escape_string()防范SQL injection。看起来它并不像我想象的那么值得信赖。

问题来自多字节编码。例如在GBK里,0xbf27并不是一个合法的双字节字符,因此addslash()会把它转义成0xbf5c27,碰巧0xbf5c是一个合法的双字节字符,由此可以注入一个0x27 (')。

addslash()无药可救。mysql_real_escape_string()可以根据字符集正确地转义,但是需要在建立数据库联接的时候指明“SET CHARACTER SET 'GBK'”。

由filter想到的一些

在公司的intranet翻文档的时候,突然发现Rasmus提及,filter其实是我们公司赠与PHP开源社区的。

想一想,PHP开发者主力就是Zend和Yahoo!。(想起Google前一段时间终于把Guido van Rossum给收了,而RasmusAndrei早就是我的同事了)Zend的不厚道出了名的,否则PHP不可能这么久一直没有一个内置的opcode cache,白白牺牲掉那些性能。(感谢上帝,PHP 6.0的发行包会含有APC,但是默认还是关闭的)我们公司是不是厚道,我不好说,但是起码在做show方便远不及“Don't be evil”的Google——Google Code,Goobutu,还有中国的黑板报。回到技术,关于我们公司使用PHP的情况,请仔细阅读Michael Radwin的这个Presentation,其中有一些细节我觉得对外面的人还是很有价值的。

APC bug

| |

最近在做一个—呃,几个million的daily pv—的project。用APC做cache后发现有问题,不时地coredump。研究了一下才发现居然这些机器上装的还是2.x的APC,赶快升级到了3.0.8——问题消失。估计就是上次我跟Rasmus说的,用APC存取size大一点点的数组会有coredump的bug。想到这里,才发现最近和Rasmus失去联络了。

memcache 2.0.0

| |

Antony终于推出了memcache 2.0.0
支持多服务器load balance和failover。

感谢上帝,我终于不用去backtrace mcache的coredump了。这个世界太美好了。

(我是memcached的粉丝)

最近关注的php扩展

|

PDO
现在我见到的许多大一些的php应用都会使用数据库抽象层。PDO毕竟是扩展,比php写的DBAL效率会好很多。

DBAL是我大学时候的最爱。后来总觉得这种缥缈的完美主义实在影响性能,而且在99.99%的情况不能带来一点好处;更换DBMS千年难见一次,而DBAL确会在每次request上都带来overhead,所以我再也没有用过了。即便PDO的效率会搞很多,我怀疑自己真的会不会使用PDO。

filter

PHP 6.0

|

自rasums在PHP Internals发表的超长大水贴PHP 6.0 Wishlist已经有4个多月了,6.0的轮廓已经逐渐开始清晰。

即便有n多(维护数百万行php代码的)人的强烈反对,看样子php team还是下定决心要在6.0清理很多东西,包括register_globals,magic_quotes,和safe mode。对于我这种一直觉得像register_globals根本就不应该在这个星球上出现过的人,倒是一件很高兴的事。似乎magic_quotes带来的麻烦远比好处多。

我一点看不出来rasmus像个学院派人士,可是“移除大量的函数alias”倒是有点过于完美主义——问题是如果一个程序员真的是完美主义,他就不会选择用php了。

Syndicate content