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上要順利編譯,還要對源代碼做一些簡單的修改。
第一步,安裝各種軟體和庫,索性的這些東東都不用編譯,省卻了不少麻煩。
- 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,並配置環境變數
- #在用戶目錄下創建一個目錄,用來儲存hiphop-php
- mkdir dev
- cd dev
- #使用Git來獲取源代碼
- git clone git://github.com/facebook/hiphop-php.git
- cd hiphop-php
- #配置環境變數
- export CMAKE_PREFIX_PATH=`/bin/pwd`/../
- export HPHP_HOME=`/bin/pwd`
- export HPHP_LIB=`/bin/pwd`/bin
- cd ..
第三步,編譯第三方庫
libevent 庫
- #下載解壓
- wget http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
- tar -xzvf libevent-1.4.14b-stable.tar.gz
- cd libevent-1.4.14b-stable
- #打補丁
- cp ../hiphop-php/src/third_party/libevent-1.4.14.fb-changes.diff .
- patch -p1 < libevent-1.4.14.fb-changes.diff
- ./configure --prefix=$CMAKE_PREFIX_PATH
- make
- make install
- cd ..
curl
官方有個提示:首先確定你的系統時間是正確的,否則configure會失敗。
- wget http://curl.haxx.se/download/curl-7.21.2.tar.gz
- tar -xvzf curl-7.21.2.tar.gz
- cd curl-7.21.2
- cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff .
- patch -p1 < libcurl.fb-changes.diff
- ./configure
在這裡要停下來,別著急make,需要先修改2個文件。
第一個文件:libcurl目錄下的lib/ssluse.c
找到
req_method = SSLv2_client_method();
在上面增加代碼:
- #ifdef OPENSSL_NO_SSL2
- failf(data, "openSSL was compiled without SSLv2 support");
- return CURLE_SSL_CONNECT_ERROR;
- #endif
- req_method = SSLv2_client_method();
第二個文件 hiphop-php的src/runtime/ext/extension.cpp
找到
for (ExtensionMap::const_iterator iter = s_registered_extensions->begin();
把上面的內容改成
- //ASSERT(s_registered_extensions);
- if (s_registered_extensions == NULL) {
- s_registered_extensions = new ExtensionMap();
- }
- for (ExtensionMap::const_iterator iter = s_registered_extensions->begin();
搞定上面兩項以後,就可以編譯了
- make
- make install
- cd ..
第三個庫 libmemcached
- wget http://launchpad.net/libmemcached/1.0/0.49/+download/libmemcached-0.49.tar.gz
- tar -xzvf libmemcached-0.49.tar.gz
- cd libmemcached-0.49
- ./configure --prefix=$CMAKE_PREFIX_PATH
- make
- make install
- cd ..
OK,至此一切準備工作已經就緒。
開始編譯Hiphop-php
-
- cd hiphop-php
-