Hiphop-php是Facebook贡献给社区的一项开源技术,通过把php文件转化为c++文件的方式,大幅提升运行效率。

对于技术人员来说,最感兴趣的就是Facebook这么大访问量的网站,是如何解决性能瓶颈问题的,而Hiphop-php就是Facebook使用到的技术之一。

尽管它已经开源挺久了,但是在国内的社区里却鲜见有人讨论和使用,所以把安装和使用方法翻译出来,供大家参考。

Github地址: https://github.com/facebook/hiphop-php

Wiki地址: https://github.com/facebook/hiphop-php/wiki

官方的Wiki里提供了Ubuntu 9.10开始各版本和FreeBSD 8.2的编译安装方式,在这里我选的是Ubuntu Server 11.10。

其实安装起来还是很简单的,无非就是一堆的下载,解压,配置,编译。但在Ubuntu Server上要顺利编译,还要对源代码做一些简单的修改。

 

第一步,安装各种软件和库,索性的这些东东都不用编译,省却了不少麻烦。

 
  
  1. sudo apt-get install git-core cmake g++ libboost-dev libmysqlclient-dev libxml2-dev libmcrypt-dev libicu-dev openssl build-essential binutils-dev libcap-dev libgd2-xpm-dev zlib1g-dev libtbb-dev libonig-dev libpcre3-dev autoconf libtool libcurl4-openssl-dev libboost-system-dev libboost-program-options-dev libboost-filesystem-dev wget memcached libreadline-dev libncurses-dev libmemcached-dev libbz2-dev libc-client2007e-dev php5-mcrypt php5-imagick libgoogle-perftools-dev libcloog-ppl0 

第二步,下载Hiphop-php,并配置环境变量

 
  
  1. #在用户目录下创建一个目录,用来储存hiphop-php 
  2. mkdir dev 
  3. cd dev 
  4. #使用Git来获取源代码 
  5. git clone git://github.com/facebook/hiphop-php.git 
  6. cd hiphop-php 
  7. #配置环境变量 
  8. export CMAKE_PREFIX_PATH=`/bin/pwd`/../ 
  9. export HPHP_HOME=`/bin/pwd` 
  10. export HPHP_LIB=`/bin/pwd`/bin 
  11. cd .. 

第三步,编译第三方库

  libevent 库

 
  
  1. #下载解压 
  2. wget http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz 
  3. tar -xzvf libevent-1.4.14b-stable.tar.gz 
  4. cd libevent-1.4.14b-stable 
  5. #打补丁 
  6. cp ../hiphop-php/src/third_party/libevent-1.4.14.fb-changes.diff . 
  7. patch -p1 < libevent-1.4.14.fb-changes.diff 
  8. ./configure --prefix=$CMAKE_PREFIX_PATH 
  9. make 
  10. make install 
  11. cd .. 

  curl

官方有个提示:首先确定你的系统时间是正确的,否则configure会失败。

 
  
  1. wget http://curl.haxx.se/download/curl-7.21.2.tar.gz 
  2. tar -xvzf curl-7.21.2.tar.gz 
  3. cd curl-7.21.2 
  4. cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff . 
  5. patch -p1 < libcurl.fb-changes.diff 
  6. ./configure --prefix=$CMAKE_PREFIX_PATH 

在这里要停下来,别着急make,需要先修改2个文件。

第一个文件:libcurl目录下的lib/ssluse.c

找到

 
  
  1. req_method = SSLv2_client_method(); 

在上面增加代码:

 
  
  1. #ifdef OPENSSL_NO_SSL2 
  2.     failf(data, "openSSL was compiled without SSLv2 support"); 
  3.     return CURLE_SSL_CONNECT_ERROR; 
  4. #endif 
  5. req_method = SSLv2_client_method(); 
 
第二个文件 hiphop-php的src/runtime/ext/extension.cpp
找到
 
 
  
  1. for (ExtensionMap::const_iterator iter = s_registered_extensions->begin(); 
把上面的内容改成
 
 
 
  
  1. //ASSERT(s_registered_extensions); 
  2. if (s_registered_extensions == NULL) { 
  3.     s_registered_extensions = new ExtensionMap(); 
  4. for (ExtensionMap::const_iterator iter = s_registered_extensions->begin(); 

搞定上面两项以后,就可以编译了

 
  
  1. make 
  2. make install 
  3. cd .. 

第三个库 libmemcached

 
  
  1. wget http://launchpad.net/libmemcached/1.0/0.49/+download/libmemcached-0.49.tar.gz 
  2. tar -xzvf libmemcached-0.49.tar.gz 
  3. cd libmemcached-0.49 
  4. ./configure --prefix=$CMAKE_PREFIX_PATH 
  5. make 
  6. make install 
  7. cd .. 

OK,至此一切准备工作已经就绪。

开始编译Hiphop-php

 
  
  1. cd hiphop-php 
  2. git submodule init 
  3. git submodule update 
  4. export HPHP_HOME=`pwd` 
  5. export HPHP_LIB=`pwd`/bin 
  6. cmake . 
  7. make 

 接下来是漫长的编译过程,但是Hiphop-php做的比较人性化的一点是编译过程中有进度的百分比提示,所以当进度正确走到100%的时候,代表编译成功了。

编译好以后的程序是

hiphop-php/src/hphp/hphp

可以执行这个命令,然后查看它的帮助,具体的用法等待下一篇博客里详述。