HipHop 将PHP代码转换为高度优化的C++代码,然后再用g++编译器编译。
HipHop生成的代码尽可能地使用函数和变量的静态绑定。
转换过程分三步:
1. 静态分析。收集声明关系和依赖关系等信息。
2. 类型推演。选择最合适的类型,是C++的标量?还是String, Array, classes, Object或者Variant。
3. 代码生成。大部分直接将PHP语句和表达式对应为C++的语句和表达式。
hiphop编译完成只是hiphop的开始 -> hiphop自带了hphpi服务器
HPHPi,是一个实验性的解释器。通过它,不编译PHP源代码也可以运行。它已经用于HipHop自身的调试中。
注:nginx并不是必须的,如果需要的话也是拿来做前端代理,带入一些用户需要的web服务器附加功能。
安装好环境后
编译前配置:
setenv HPHP_HOME /usr/local/src/freebsd-hiphop-php
setenv HPHP_LIB /usr/local/src/freebsd-hiphop-php/bin
setenv CMAKE_PREFIX_PATH /services/hipop-php-include
setenv CC /usr/local/bin/gcc44
setenv CXX /usr/local/bin/g++44
编译 1 单个文件
1. /usr/local/src/freebsd-hiphop-php/src/hphp/hphp test.php --keep-tempdir=1 --log=3
2. /tmp/hphp_p6vSsP/program -m server -p 8080
3. curl http://localhost:8080/test.php
编译 2 多个文件
1. find . -name "*.*" > files.list
2. /usr/local/src/freebsd-hiphop-php/src/hphp/hphp --input-list=files.list -k 1 --log=3 --include-path="." --output-dir=/tmp/test --force=1 --cluster-count=50 -v "AllDynamic=true" -v "AllVolatile=true"
3. /tmp/hphp_DwhCB8/program -m server -v "Server.SourceRoot=/tmp/hphp_DwhCB8" -v "Server.DefaultDocument=index.php" -c /usr/local/src/freebsd-hiphop-php/bin/mime.hdf -p 8080
用hphpi编译实例
1. /usr/local/src/freebsd-hiphop-php/src/hphpi/hphpi -f curlTest.php
2.sudo /usr/local/src/freebsd-hiphop-php/src/hphpi/hphpi -m server -p 8088
hphp编译后的program是一个完整的站点,能自己监听端口,无需apache,nginx等web服务器
注:
1. 编译常用选项 hphp/hphp
--input-list=files.list
//多个文件用(单个文件直接写文件名字)
--keep-tempdir=1
//[简写:-k 1]
--log=3 //指明编译的log等级 ,一般启用3,有用的信息都打出来
--force=1 //即便遇到warning和error都强制编译代码 ,错误和警报会在报告中体现出来
--gen-stats=1 //是否需要生成代码状态和代码错误报告
--include-path="."
//include包含语句中出现的代码文件目录
--cluster-count=50 //如果不配这个参数的话,有几个php文件就会生成几个cpp文件,导致编译过程变长。所以如果基数过大的话,可以启用这个参数
--output-dir=/tmp //编译完成文件存放目录,默认在/tmp下
--program=projectname //
-v "AllDynamic=true" //支持动态的函数调用和动态方法调用
-v "AllVolatile=true" //可以支持动态函数和类的声明
2. 运行 参数如下
./program
Options:
--help display this message
-m [ --mode ] arg (=run) run | server | daemon | replay | translate
-c [ --config ] arg load specified config file
-v [ --config-value ] arg individual configuration string in a format
of name=value, where name can be any valid
configuration for a config file
-p [ --port ] arg (=-1) start an HTTP server at specified port
--admin-port arg (=-1) start admin listerner at specified port
-u [ --user ] arg run server under this user account
-f [ --file ] arg executing specified file
--count arg (=1) how many times to repeat execution
--no-safe-access-check arg (=0) whether to ignore safe file access check
--arg arg arguments
--extra-header arg extra-header to add to log lines
--build-id arg unique identifier of compiled server code
--xhprof-flags arg (=0) Set XHProf flags
官方:
https://github.com/facebook/hiphop-php
https://github.com/facebook/hiphop-php/wiki/using-nginx-as-front-server-to-hiphop
运行hiphop
https://github.com/facebook/hiphop-php/wiki/running-hiphop
运行时选项
https://github.com/facebook/hiphop-php/wiki/Runtime-options
其他参考
http://xenojoshua.com/tag/hiphop-php/
http://huichen.org/en/2010/07/hiphop-for-freebsd/
http://blog.csdn.net/cyberexp2008/article/details/6756826