PHP编译器

目前有很多工具可以将PHP转换成C或C++,编译成二进制可执行文件、PHP扩展、CGI/FastCGI形式的Web程序、内嵌web server(MicroServer)形式的离线Web应用、使用PHP-GTK的桌面图形界面应用、以及控制台应用软件,包括PHC(http://www.phpcompiler.org/)、PCC(RoadSand PHP Compiler,http://code.roadsend.com/pcc)、 RPHP(RoadSand Raven,http://code.roadsend.com/rphp)以及Facebook的HipHop for PHP(http://developers.facebook.com/hiphop-php)。

Facebook在今年2月2日发布了HipHop for PHP,实现了将PHP代码转换为高品质C++代码,然后用G++编译成可执行的二进制文件,从而大幅减少服务器CPU和内存消耗。今年2月份的版本可以减少50%的CPU使用率,通过不断优化,到8月份现在又可以再提高1.8倍的速度,目前Facebook绝大部分PHP均已采用。HipHop for PHP的优化效果是非常显著的,例如WordPress在HipHop下提升幅度可以达到2.7倍。

写书

公司同事约定准备写书,一件很有意思的事情。怎么说呢,我感觉其实自己有很多的东西可以“吐”出来的,只是没有找到这样的机会。不论是学习计算机的过程中,还是成长的过程中,受到很多别的人的帮助,而极少回馈别人,这不是我一贯的风格。我是更愿意授之于人的。所以同事间刚提出写书这个计划的时候,我心里面是有触动的。表面看是一汪清湖,其实底下暗流涌动。说实话,很希望自己能够完成这个事情。

MySQL在Windows下默认小写表名的问题

  在Windows下,建数据库和数据表的时候,MySQL默认会将其中的大写字母转化为小写字母来处理,这样建出来的数据库和数据表名称都是小写字母。因为Windows平台是大小写无关的,因此这样的方式不会有什么问题,不过一旦需要做平台转移(比如将系统从Windows移植到Linux下面去)的时候,就会遇到很严重的问题。

  有没有办法解决这个问题呢?答案是肯定的。

  MySQL的这个特性由mysqld的一个参数控制:lower_case_table_name,或者是lower-case-table-name(这两个是等价的)。
  在my.ini的[mysqld]下面加入“lower-case-table-name = 0”,放置为单独一行,然后重启mysql服务器,问题解决。或者也可以在启动mysql的命令中加入“–lower-case-table-name=0”这个参数,也OK。

  下面是我常用的命令行方式手动添加MySQL为服务的command,大家需要的可以改改拿去用,哈哈。
  D:\servs\mysql\bin\mysqld.exe –install MYSQL –defaults-file=D:\servs\mysql\my-small.ini –lower-case-table-name=0

Apache+SVN的一个小细节

今天重新安装Apache(2.2.11)+SVN(1.6.3)的时候,遇到一个问题。Apache老是报“Cannot load mod_dav_svn.so into server”的错误。这是一个比较稀奇的错误,因为以前一直没有遇到过。记下处理的方法,以备查阅。

修改Apache的httpd.conf(我一般是建立外部配置文件,然后再httpd.conf中Include进去即可),直接LoadModule svn文件夹下面的两个so文件,不用把这两个so文件复制到modules文件夹中再load,这样反而适得其反。

另,网上有文章写的,把两个so文件和intl3_svn.dll,libdb44.dll这两个文件拷贝到Apache的Modules文件夹中就可以了,其实这样是不行的。用DependencyWalker检查过mod_dav_svn.so,发现它所依赖的dll文件远不止那两个。所以如果真的想把so文件拷贝到Apache的Modules文件夹下面去加载的话,那么别忘了顺带着把svn/bin目录下所有的dll文件一起拷贝过去,否则就会出现“Cannot load mod_dav_svn.so into server”的错误。

nginx0.7.x + PHP5.2.x搭建经验

nginx是现在被热捧的web server,源于它的高执行效率。需要注意的是,IT界的热捧和娱乐圈的热捧有根本上的区别,IT界的热捧多以实用性强为主,而娱乐圈的则多以炒作为主。不管怎么说,经过这一年多的耳闻,我是被打动了。我本人是个实用主义者,信奉的原则就是:实践出真知。听到这么多兄弟姐妹夸奖nginx当然也忍不住想试试看。于是昨天就开始动手搭建nginx+php的平台。其间遇到一些典型性的现象,学到不少经验,拿出来跟大家分享一下。

先说一下软件环境:Windows2003ENT + nginx0.7.56 + PHP5.2.6(后升级至5.2.9)

nginx和php的安装什么的我就不说了,网上一抓一大把。Windows平台的安装暂且不表,Linux平台的安装说明我比较推崇的是张宴同学的《Nginx 0.7.x + PHP 5.2.9(FastCGI)搭建胜过Apache十倍的Web服务器(第5版)[原创]》一文,写得很全很详细,该突的突,该凹的凹,很有线条美,基本上可以拿来当手册用。
这里顺便提一下我对nginx的看法。nginx这个小东西以前听别人的说法是“高效”、“低开销”、“能承受大负载”,昨天亲自接触了一下它的源码,才发现这个小东西的魅力有多大!源代码不多的几个文件,个个都那么小巧,没有超过50KB的吧,大一些的一般都是30多KB,而且结构很清晰,基本上一看就能看懂(就我这水平要一看就能看懂,对程序员来说还是挺不容易的)。这让我想起了网上对apache的抱怨:臃肿庞大,不务正业等等。以前大家什么都不懂的时候,当然希望你把所有的事情做好,我“下一步”、“下一步”就OK了;现在大家都懂了,返璞归真,还是希望能有一款精专的软件来做一件具体的事情。这个时候Apache就无法成为领头羊了,因为做作为web server而言,它真的不够出色!而nginx则恰好相反,只做web server这一件事情,而且做得很精专,精专到要它做一个php_module它都会拒绝,结果导致php只能以类cgi模式来配合nginx运行。从这点上讲,我很敬佩nginx的精神!

言归正传,说说具体的东西。

  1. AP(Apache + PHP)架构中顺理成章的一些东西,需要在nginx中手动配置,主要是php中 $_SERVER 全局变量中的一些值,比如“SCRIPT_FILENAME”、”PATHINFO”等等。否则的话,需要用到这些值的php程序在nginx将无法正常运作。
  2. nginx + php fastcgi的性能确实比AP架构高很多,据不严格测试,nginx+fastcgi的执行效率(按照Requests per second 这项指标)为Apache+mod_php的161%(nginx为25.64,apache为15.91)。
  3. 不要尝试在Windows下部署这套平台作为生产环境,个人感觉Windows下php的fastcgi模式有问题,最直观的是不能支持进程池(没有合适的第三方程序),其次单进程的php fastcgi会在有压力的情况下直接挂掉(ab -c50 -n500,第400次请求完成之后)。

还有些东西还没有做测试,主要是MySQL方面的。因为没有用过php的fastcgi模式,所以对这个模式下php的一些行为也只是有所耳闻而已,究竟实情如何,还要自己动手测试测试才能知道。

小结:nginx + php fastcgi 最大的问题莫过于php对fastcgi模式的支援不够。长期以来php和Apache稳定而长远的战略合作关系让php将主要的精力投入在 mod_php模式上,对fastcgi这种应用较少的模式关心不足,结果就是php要用fastcgi方式运行的话,还非得去找第三方支持不可。nginx本身我认为是很完美的,也没有对nginx做过多的测试,相信它的能力!毕竟这么小巧的程序,出错的概率能控制在一个非常小的范围内。

从开心网看网站的存活和价值

  开心网是去年开始兴起的一个SNS网站,从界面上看模仿的是国外的facebook,从创始人和技术力量的渊源来看抄袭的sina的创意,从域名上来看跟的是另外一个“开心网”的风,从目标用户来看与都市客一类的网站是竞争对手…… 但不管怎样,开心网都是成功的,它不依靠任何正式的宣传渠道,仅仅依靠病毒营销和一段时期的邮件营销就实现了类似facebook初期的用户激增,这是任何网站都向往并且难以做到的。网站名称也叫“开心网”的另外一个网站与MSN合作,做了MSN Live Messenger的一个交友频道,到目前为止仍然半温不火,让人感叹差距之大。这让我想了我以前老大的一句话:模仿是为了超越。当然,这是旁话了。

  但是最近却从多种媒体上看到几篇批评开心网的文章。
  第一篇是从网上看到的,文章以叙述的形式列举了一个案例,用颇为担心的口吻质疑给大家生活同时带来乐趣和紧张的开心网会不会让许多白领从此沉迷进去。文章的链接已经忘记了,但是现在在Google上搜索“开心网 沉迷”仍然可以看到类似的文章。
  第二篇文章是从今天的重庆时报上看到的。报道称某单位的李先生收到一份邮件,说自己已经被某好友“买”为奴隶,并让他在情人节那天去“卖玫瑰”。该好友正是李先生的下属,而且该好友还通过网络告诉李先生,再买卖李先生几次就可以让李先生去“掏大粪”了。李先生因此觉得不快,认为该网站此举侵犯了自己的名誉权。记者请教律师,律师则认为我国在虚拟领域方面存在法律缺失的情况,李先生的主张恐怕难以得到法律部门的支持。
  看起来,风风火火整一年的开心网现在遇到了相当大的问题。究竟是开心网树大招风,还是SNS真的有这么多“讨人厌”、让人担忧的地方呢?

  SNS目前在国内是很火的,从flickr和facebook相继火起来之后,PHP和SNS紧跟着几乎同时火起来了,我记得的时间点是在2006年春节前后。当时做架构做网站的都以flickr为蓝本,做运营做UI的都以豆瓣为底稿,业内很多大中小鱼甚至虾米强烈关注这些新兴并且能够流量飙升的网站,不管实际情况,一概以它们为榜样。
  然后到2006年中的时候开始流行“SNS”的提法,全称是“Social Networking Service”,中文叫“社会关系网络(服务)”,很多网站以此为旗帜,与当时尚在流行的BBS脱离干系、划清界限。
  又经过半年多的酝酿期,到2007年上半年的时候,千橡推出“校内网”,几乎同时出现了一个Twritter的中国翻版“饭否”,这二者都是当时业内关注较多的网站。其次还有庞东升的51.commyspace,以及从06年就开始做但一直处于“实验阶段”的“蚂蚁网”。真正的混战我感觉是从饭否开始做与校内网同型的“海内网”,而“叽歪”开始侵袭饭否地盘开始的。从那时候起,大家就不再好好做事儿了,不管是做“试验”的也好,还是创业的也好,都不甘于已经起步的那一块儿地盘,只要有精力就会做别的。当然主要是抄外国正在风头上的网站,其次也抄国内其它流行网站的元素,抄形式抄风格,开玩笑的说,再急点儿恐怕连版权信息都一块儿抄过去了——来不及改啊。

  从SNS在中国的流行就已经能够看出问题的所在了:几乎所有的网站都是抄袭自国外,成型推往市场之后吸引用户,流量增大之后再考虑收费、广告等收益。可以这么说,国内所有SNS网站都是应景的产物,除了几大门户网站和少数几个娱乐网站外,SNS在中国其实并无产生的必要,换句话说,SNS在中国原本并没有市场。
  可是鲁迅先生说了“世上原本并没有路,走的人多了,也就成了路。”同理,SNS在中国原本并没有市场,用的人多了,也就有了市场。还有一句更贴切的话来形容:时间就像女人的乳沟,挤一挤总是有的。同样,SNS的市场挤一挤也是可以挤出来的,而且看开心网这势头,还能挤出不少来。

  问题就出在这儿了:中国SNS的市场是挤出来的,而不是自然产生的。从商人的角度来看,两者没有区别,但是从自然规律的角度来看,两者的区别就太大了。初中高中乃至大学的物理题中经常有这么一句:“近似平衡状态下,物体移动…”,“近似平衡状态”,也就是变化的过程非常缓慢,物体近似于一直处于平衡状态,因为这样的情况下物体才能非常稳定、非常平滑地从一个状态过度到另外一个状态,否则的话物体的状态特征值就会像做简谐振动的单摆,一来一回,一来一回,反复多次才能移动到较稳定的状态下。
  中国国情决定了现阶段我国能够操作计算机上网的网民不多,有充足时间和深层互动需求的网民更少,基于用户间互动的SNS网站必然不可能像放开注册门槛之后的facebook一样激增。不过开心网倒是打破这个常识,“女人的乳沟”还真的被它挤出来了!现在的开心网上不仅占满了IT业内的用户,还有中学生、在实业单位工作的网民在上面寻开心,有网友爆料自己因为上了开心网常常带凌晨两点还在开心网上贴车牌。在开心网赚足大家眼球的同时,被开心网硬“挤”出来的这部分网民,生活工作学习已经受到了严重的影响,毫无疑问,这种局面不是稳定状态,无论如何长久不了。“出来混,总是要还的”,相信终有一天,开心网再也开心不起来。

  其实好多网站都跟开心网一样,拼命“挤”自己的那一块儿“乳沟”,有些成功的,但大多数还是失败了。从来没有人想过那些网民,被现代商业和急功近利的营销手段挑拨地东倒西歪找不着北的无辜网民!他们对网络已经越来越失去信心,更愿意相信网络是一块藏污纳垢之地,最典型的就是中国学生的家长,他们深怕自己的子女深陷网络无法自拔,总是千方百计和网络“过不去”。其实这是一种很正常的反应,如果不是某些商业网站昧着良心做些容易让中学生上瘾的产品,为短期利益丢弃了自己的公德心,怎么可能会有那么多学生流连在网吧不愿回家?!那么作为学生家长,在不甚了解网络的前提下,反对网站、游戏和网络本身也就无可厚非。反过来,如果是网络公司自己能够做好,首先不向年满18周岁的孩子提供类似的服务,其次通过身份鉴别或者与用户父母沟通的方式——这种方式在国外的儿童网中已经有很好的先例——来确保他们不接触或者少接触这类产品,这样做之后,纵使短期内无法做到用户数量的激增,但在“近似平衡状态下”,网站的用户数一定是一个增长的过程。
  现在的人呐——不止是商人——都崇拜该死的急功近利的思想!生得快,过得快,死得也快。
  说一说,又要说到我百般痛恨的“快餐文化”上,唉!

PHP框架的辨析点

  看现在的语言、项目,真的是越来越多越来越繁杂,虽然解决的都是些小问题,但所用的方法却非常地繁琐,人们(包括发明语言的人们,使用语言的人们和使用产品的人们)的理由是:这样可以增强产品的健壮性、稳定性(发明语言的人说的),可以大大提高开发效率(使用语言的人说),使用起来更加简便,而且就算慢点儿也还能接受(使用产品的人说的)。于是,一种语言往往最后因为越来越繁杂,或者基于这种语言的框架越来越繁杂,最后被定性为:语言本身遇到了瓶颈。后果就是不断的竞争者涌现出来,即便是这些竞争者只是换汤不换药,仅仅是精简了别的成熟语言的一部分然后加点儿噱头,也会被认为是创新和突破,慢慢流行起来。当然,流行起来之后也不过是进入下一个循环而已,就像以前听过的那个笑话:放牛挣钱,挣了钱娶媳妇,娶了媳妇生娃,娃长大了放牛……

  PHP的创始人在一次大会上用框架和原生的PHP分别写了一个Hello World程序,并做了一个benchmark,结果当然是原生PHP快出很多。他由此倡导大家尽量不要使用框架而是使用原生的PHP。
  不用框架我想是不现实的,接触过编程这行的朋友应该都知道,不论是客户还是老板,都只看开发效率的,至于bug,大家现在都能接受,没什么大不了的。而且团队合作的时候不用框架也不太现实,毕竟现在能在开发前把所有规范做好的项目实在少之又少,没有框架约束、没有成文的规范,做出来的项目必定是不堪回首的豆花——别提了,一提就碎!既然要用框架,那么问题仅仅在于用什么样的框架!我个人的理解是,PHP创始人提倡大家根据不同的项目定制不同的框架,说起来大家其实也很容易理解:按需定制的肯定是最好的嘛。不过这个定制,就存在一个问题:会有重复性的问题,即:很多底层的东东是几乎每个项目都会用到的,比如database、cache、factory等等,如果每次定制框架的时候都重新开发这些东西,不仅会降低效率,而且可能因为个体差异造成这些模块不稳定和难维护的概率。
  综上,我的理解是,自己定制一个最简化的文档,然后再根据具体项目的需要,进行必要的扩展。

  感觉框架这种东西在国外之所以这么流行其实很大程度上是因为国外的网站流量一般不会达到国内网站这么“疯狂”的地步。在国外,日PV达到300W应该就算是很大很大的站了,但是在国内,日PV300W可能只是某细分领域的前几名而已。这样的背景下,国外的网站大多喜欢使用框架,首先肯定是因为使用框架开发效率高、稳定性健壮性好,其次框架带来的效率损失对他们来说也不是很大,在一个可以接受的范围内,但在国内,这个前提就不存在了,如果有好的运营,访问量会陡增,框架带来的只是隐患,那时候使用框架开发出来的应用越多,需要迁移的模块越多,灾难反而越大。对网易、sina等大负载网站也是同样的,只能使用自己的框架,开源的框架再好,也不能直接拿来使用,必须要经过修改,甚至只能取其设计理念,重新开发,否则的话根本没办法用。

  “中国特色”造成在国内使用框架的都不是什么大型的公司,要么是做外包的技术型公司,要么是小型网站;同样,在项目中熟练使用框架的人在国内大多也算不上什么高手吧,当然,纯研究、关注、开发框架的除外,呵呵。

找工作

  在网上找工作。城市:上海;行业:不限;职位:PHP系统设计或技术总监;薪酬:8K。

  发现现在这样的工作几乎是不存在的,除了刚刚看到的上海巨人网络(史玉柱的那个“巨人”)招聘的PHP开发工程师有点儿希望以外,其余的我看都不靠谱。要么公司太小,做些产能过剩的事情;要么行业不对,招聘的是全才,连程序开发到美术设计到运维一揽子全部包干。总之就是没合适的。

  好不容易看到有几个貌似靠谱的,一看公司介绍就有点儿晕:本公司致力于…的创新,颠覆…的传统。
  我的那个汗啊!  =_=!

  给我的感觉是:多看看别人,可以帮助自己少犯错误。
  以前也经常说这样的话、像这样的事情,想自己要做怎样怎样的事情,填补产业链中的某某空隙,而且这个空隙现在存在哪儿简直都是不可以想象的,人们能对它熟视无睹绝对是一种地狱式的煎熬多么可怕啊,我一定可以成为救世主。如是云云。
  然而往往就是这种时候我忘了一个浅显的道理:第一个淌石头过河的人,大多数时候都会湿脚。这种人的现实意义是:为整个社会积累经验和教训。
  同理,一个总是想着要“创新”、要“颠覆”的公司,失败的几率恐怕在95%以上吧!反而是只想做些普普通通小事情解决身边小问题的公司和人,他们常常在不经意间做成了令人羡慕的大事。就像做人一样,太浮躁太露芒总是不好的,不务实难有成就,步子跨得大不一定总是好事,也很容易失去重心跌倒。

  话说回来,现在找这种务实的公司太难了。而且现在不都讲究一个对员工的激励吗,高层都务实了,对员工实话实说,谁还有动力卖命做事儿啊,谁会在这种“适合养老”的公司里面苦干啊。所以,大家都说点儿擦边话,做点儿擦边事儿,我呢,找家差不离的公司,觉着靠谱也就行了,说不定就是下一家腾讯,呵呵。

控诉!坚决控诉!对flashget(网际快车)的控诉!!!

  很久没什么事情能让我这么愤怒了!!!虽然知道其中很大一部分原因是不是这件事真有那么严重,或者快车犯下什么不可饶恕的滔天大罪,再则我自己可能也有部分责任在里面——可是谁让Windows2008的兼容性确实还是如此脆弱呢!——总之,我真的有点儿怒了!

  大约四五天前,安装了flashget的最新版本3.0beta版,当时没觉得有什么特别的问题,只是安装程序执行到最后一步“flashget3.exe /install”的时候卡死了,不再有任何反应,其它的倒是没有问题,表面上一切正常,新安装的flashget3也能正常使用。可惜的是,随之就出现了诸多的诡异现象,而且是非常非常让人气愤的诡异现象!

  • 首先过了大约半天左右的时间,突然发现Maxthon不能使用了。打开任何一个网页,都是白板,而且进度条连都不带闪一下,直接就是白板,就跟我没有回车一样。这种情况无论重新安装Maxthon2和Maxthon多少次都没有改观。我以为是Maxthon的问题,还郁闷了好一阵。因为这几个月都用Chrome和SeaMonkey做主要的浏览工具,Maxthon只是为了Ali和CMB的插件应景的,最近又不买什么东西,所以也就忍下来了。
  • 接着发现IE7也不能打开网页了:标签最左侧的“圈圈”一直在转,代表浏览器确实收到我的回车指令,可就是不见有后话,白板始终是白板。
  • 然后发现DreamweaverCS3也没办法打开了。优雅的Splash消失之后能看到DW的窗口框架,但自此再无后话,只能从任务管理器里面结束进程。
  • 然后发现金山词霸谷歌合作版的主窗口也打不开了。无论点击右下角任务栏里面的图标多少次,都没有任何反应,CPU占用量和硬盘等的闪烁频率一应平稳,就跟姚明散步时的心跳一样平稳,一点儿波动都没有。
  • 然后发现系统的开始菜单出现问题了:打不开折叠菜单,只能打开“所有程序”,看到“所有程序”下面的东西,打不开它的下级目录,看不到它下下级目录里面的任何东西。
  • 然后发现卸载部分程序的时候始终会在最后一步卡死,不管试多少次都是一样,同样的步骤上卡死。但只有部分程序的卸载程序是这样,其中就包括flashget3和flashget2.4,他们卡死的步骤为“flashget3.exe /remove”
  • 然后发现系统根本无法关机,在最后一步“正在关机”的画面就停住了,以前和IE7标签栏上的小圈圈一样转得飕飕飕的小圈圈,这几天根本就转不动,死翘翘的感觉。
  • …………
  • 然后我把flashget3和flashget2.4卸载了,进安全模式重装了IE7,再回到正常模式,一切问题都消失了。

  我有很多想要问候某些人亲属的话,暂时就忍下去了。害得我4、5天没办法工作,差点把系统重装,最后绞尽脑汁找出问题之所在,这些事儿也就不提了。我只想提醒诸位一句:一个开始做恶的快车,希望大家少用为妙!

  怀念侯先生开发快车的那个时代!

用CodeIgniter做同学录

  用CodeIgniter做一套完整的系统,是我今年大半年的愿望,但是因为种种原因,一直没有开动(要细述起来,估计又要归结为一个“忙”字 =_=!),现在终于要动手,为我以前的班级做一套同学录系统。

  等到动手的时候,才发现自己还有很多事情要做,有很多东西要学:产品文档、页面图、技术文档、架构及类图,编码当然不说了,还有少许的美工工作和测试。
  @_@!

Previous Older Entries