前提:只支持64位系统
升级GCC:
安装CMake:
https://github.com/jackywei/HOW-TO-BUILD-HHVM-WiKi/wiki/Build-&-Install-CMake-2.8.10.2-in-CentOS6.3
升级boost:
备注:当boost上面方法不通,请用下面这个
./bootstrap.sh
./b2 install
之后参考:
https://github.com/facebook/hiphop-php/wiki/Building-and-installing-HHVM-on-CentOS-6.3
Building HipHop make 之后还需要
make install
完成之后运行hhvm 为执行单个PHP文件
可以启动WEB服务
配置参考:
#日志配置 Log { #日志等级 Level = None (default) | Error | Warning | Info | Verbose # 使用@抑制错误是否后台日志启用错误记录 NoSilencer = false #容许用户自己处理错误 AlwaysLogUnhandledExceptions = true #PHP的错误等级 RuntimeErrorReportingLevel = 8191 #下面3个指定错误的格式及消息头(C++错误16进制,是否转换等) Header = false InjectedStackTrace = true NativeStackTrace = true #最大日志数量 MaxMessagesPerRequest = -1 #是否启用日志 UseLogFile = true #日志文件 File = /usr/local/hiphop/log/server.log # 访问日志格式 AccessLogDefaultFormat = %h %l %u %t "%r" %>s %b #日志格式 #Access { # * { # File = filename # Format = some Apache access log format string # } #} # 管理后台日志 #AdminLog { # File = filename # Format = %h %t %s %U #} # 是否启用 hphp_log() 来得到PHP代码的信息 ApplicationLog = true # 将错误分组,可以保存至数据库 # Log aggregator logs one line per several errors, grouped by error's # stacktraces. It can also save errors to a specified database. #Aggregator = false #Aggregator { # File = filename # Database = [username[:password]@]server[:port][/database] # SleepSeconds = 10 # polling cycle for aggregation #} } #错误处理 ErrorHandling { CallUserHandlerOnFatals = true NoInfiniteLoopDetection = false NoInfiniteRecursionDetection = false MaxStackDepth = 1000 ThrowBadTypeExceptions = false ThrowNotices = false NoticeFrequency = 1 # 1 out of these many notices to log WarningFrequency = 1 # 1 out of these many warnings to log AssertActive = false AssertWarning = false } #资源限制 ResourceLimit { CoreFileSize = 0 # in bytes MaxSocket = 0 SocketDefaultTimeout = 5 # in seconds MaxRSS = 0 MaxRSSPollingCycle = 0 # in seconds, how often to check max memory DropCacheCycle = 0 # in seconds, how often to drop disk cache } PidFile = /usr/local/hiphop/etc/server.pid # 进程PID文件 # $_SERVER['name'] = value # 服务器变量 ServerVariables { name = value } # 环境变量 # $_ENV['name'] = value EnvVariables { name = value } # 服务器配置 Server { #域名IP端口 Host = www.domain.com IP = 0.0.0.0 Port = 80 #处理的线程数量 ThreadCount = 50 #代码根目录 SourceRoot = /var/www/www.domain.com/public_html #共享代码目录,如加zf等框架引入等 #IncludeSearchPaths { # * = some path # * = another path #} #请求超时 RequestTimeoutSeconds = -1 #请求处理内存限制 RequestMemoryMaxBytes = -1 # 代码预加载,关闭 # Recommend to turn this on to avoid memory leaks and to enable warmup # document features. EnableMemoryManager = false # 显示内存问题,均在调试时候开启 # Only for debugging memory problems. When turned on, server will report # SmartAllocator's usage for each thread to stdout. CheckMemory = false # 多子域名 # If ServerName is not specified for a virtual host, use prefix + this # suffix to compose one #DefaultServerNameSuffix = default_domain.com # Forcing $_SERVER['SERVER_NAME'] to come from request header #ForceServerNameToHeader = false # 启动选项 # startup options # TakeoverFilename = filename # for port takeover between server instances # 默认文件 DefaultDocument = index.php # 启动文件 #StartupDocument = filename #WarmupDocument = filename # 程序启动调用一个函数 #RequestInitFunction = function_name #ThreadDocuments { # * = somedoc.php # * = another.php #} # 文件未找到处理文件 ErrorDocument404 = 404.php #致命错误消息 FatalErrorMessage = some string #关闭选项 # shutdown options GracefulShutdownWait = 0 # in seconds HarshShutdown = true EvilShutdown = true DanglingWait = 0 } AdminServer { Port = 8088 ThreadCount = 1 Password = 123456 } #静态内容 StaticFile { Extensions { bmp = image/bmp } Generators { * = static_resource.php } }
出错:
unable to find/load systemlib.php
rm -rf /usr/local/bin/hhvm #/usr/local/hiphop 为你的源码编译目录 ln -s /usr/local/hiphop/hphp/hhvm/hhvm /usr/local/bin/hhvm
如果接着报库文件找不到,请建立链接到/usr/local/lib目录即可
hhvm 中,部分php 函数不可用 ,如eval phpinfo等
配合nginx 使用
hiphop 配置
RewriteRules {
* {
pattern = ^.*$
to = index.php
qsa = yes
}
}
nginx 配置
root /var/www/;location / {
autoindex on;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php;
}
location ~ .php$ {
proxy_pass http://127.0.0.1:9000$request_uri;
}