1. 安装

需要64位的ubuntu 10.10,按着https://github.com/facebook/hiphop-php/wiki/Building-and-Installing-on-Ubuntu-10.10的步骤安装,完全没有问题,一路顺利下来了。
想2个礼拜之前死活都装不上,实在是。。。
安装路径是在:/home/jonathan/dev/hiphop-php
安装完成后最好配置几个全局变量,在/etc/profile里添加:
export PATH=$PATH:/home/jonathan/dev/hiphop-php/src/hphp:/home/jonathan/dev/hiphop-php/src/hphpi
export CMAKE_PREFIX_PATH=/home/jonathan/dev/hiphop-php/../
export HPHP_HOME=/home/jonathan/dev/hiphop-php
export HPHP_LIB=/home/jonathan/dev/hiphop-php/bin
PATH主要是为了执行hphp和hphpi两个命令的方便,后3个变量是指定软件安装和类包的位置
hiphop-php的版本为:HPHP_VERSION(1.000)
Compiler: heads/master-0-g841477c2996508fd06086ad1713bb1cec05545e9

现阶段有一个bug,如果libboost 系列软件包的版本高于1.41的话,就会导致--config参数导入的hdf配置文件解析有问题。
ubuntu10.10上有1.42和1.40可选,默认是安装1.42,如果装了1.42的话,就需要把所有的libboost类包都删除,然后重新安装1.40的类包,并重装hiphop-php。
重装也很简单,就是进入/home/jonathan/dev下,把hiphop-php整个文件夹都删除,然后从git上下载新的代码重新开始cmake和make。
具体的bug内容请看这里,需要翻墙。

2. 理解

简单来说hiphop做的事情就是把php代码编译成c++代码,并使用hiphop自带的服务器启动编译好的“program”,监听某个端口,如果监听的端口是80的话,那么相当于服务已经上线了。如果还需要额外的服务器功能的话,可以启动nginx,改动配置将php脚本的解释定位到本机localhost监听的端口上就可以了。

3. 简单的示例

1. 在/var/www下生成test.php文件,内容如下:
[codesyntax lang="php"]

<?php
echo 'this is just a simple test';

[/codesyntax]
2. 安装nginx,直接用apt-get安装,安装完后配置如下:
/etc/nginx/nginx.conf
[codesyntax lang="c"]

user              www-data;
worker_processes  1;
pid               /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server_tokens off;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;

    #gzip
    gzip            on;
    gzip_comp_level 6;
    gzip_proxied    any;
    #gzip_types      text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/png image/gif image/jpeg image/jpg;
    gzip_disable    "MSIE [1-6]\.";

    #log
    log_format main '$remote_addr - $remote_user [$time_local] '
    '"$request" $status  $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

[/codesyntax]
/etc/nginx/sites-enabled/default
[codesyntax lang="c"]

server {
        listen   80;
        access_log  /var/log/nginx/localhost.access.log;

        location / {
                root   /var/www;
                index  index.php index.html index.htm;
        }
        location /nginx_status {
             stub_status on;
             access_log off;
        }
        location /doc {
                root   /usr/share;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }
        location /images {
                root   /usr/share;
                autoindex on;
        }
        location ~ \.php$ {
                proxy_set_header   X-Real-IP  $remote_addr;
                proxy_set_header   Host       localhost;
                proxy_pass         http://localhost:9191;
        }
}

[/codesyntax]
注意看php的配置部分,nginx在接到php请求之后会将它转发到本机的9191 端口去处理,这个就是我们这次配置的关键

3. 进入/var/www文件夹下进行编译:
hphp k 1 --log=3 test.php
参数k是表示编译后生成的暂存文件不会被删除,--log=3表示 编译过程中的信息会在命令行中显示出来
编译完成后的内容放在/tmp/hphp_#$%#$下

4. 进入刚才编译完成的文件夹,使用命令:
./program -m daemon -p 9191
参数m表示使用守护进程模式启动,p表示监听的端口号为9191,这个端口号必须和nginx里配置的端口号一致

5. 使用浏览器访问启动的东西:http://server-url/test.php
查看浏览器里显示出来的内容就是php代码里写的echo内容