现在的位置: 首页 > 综合 > 正文

HipHop 学习研究

2013年08月02日 ⁄ 综合 ⁄ 共 2873字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.