hiphop编译完成只是hiphop的开始,代码的服务才是我们最终的目的。hiphop自带了hphpi服务器,根据我最近看的文章都说需要启动hiphop自带的服务器,nginx并不是必须的,如果需要的话也是拿来做前端代理,带入一些用户需要的web服务器附加功能。

要启动服务器,首先需要找到我们编译完成的东西,一般是放在/tmp下面,如果你在编译的时候没有自己定义过输出位置的话。可以去/tmp下找/tmp/hphp_*这样的文件夹,这些都是hiphop编译出来的可执行文件。进入刚才所编译完成的目录下,执行刚才编译完成的二进制文件就可以了,如果在编译的时候没有给予指定的参数的话,可执行文件的名字默认是program。

接下来介绍一些启动时的参数:

1. -m
这个是必须的,表示服务器启动是以什么模式进行,一般备选的是“server”或“daemon”。server表示以命令行模式启动HTTP服务器,daemon表示以守护进程模式启动HTTP服务器。

2. --config=FILE
这个配置表示进阶的启动选项配置文件应该从哪里去寻找。

3. -p
指定启动监听的端口。

......此外还有很多......

当然,和编译选项一样,服务器启动也有进阶的选项可以使用,在刚才配置项的第二点里已经有了,具体的配置项很多很多,我列下我在使用的配置文件:

[codesyntax lang="c"]

Log {
  #RuntimeErrorReportingLevel = 0
  Level = Verbose
  AlwaysLogUnhandledExceptions = true
  InjectedStackTrace = true
  NativeStackTrace = true
  MaxMessagesPerRequest = -1

  UseLogFile = true
  File = /tmp/server.log
}

Server {
  IP = 127.0.0.1
  Port = 80
  SourceRoot = /var/www
  DefaultDocument = index.php
  #IncludeSearchPaths {
  #  * = /var/hiphop
  #}
}

[/codesyntax]
log下的内容就不解释了,直接使用就好。server这里有个东西需要解释下,就是SourceRoot。这个东西比较关键。举个例子来说明,如果你编译的系统分两部分,一部分是放在webroot下面的页面,一部分是放在lib下面的库。我们简单定义webroot为/var/www/,lib库为/var/lib,那么编译后这两个文件夹都存在于c++代码库里。这个时候SourceRoot这个变量就起作用了,这个变量指定了我们服务器里用户可见的代码库是什么。一般来说放在webroot下的页面我们是允许用户访问的,而lib下的代码是不允许访问的,那就把SourceRoot设成/var/www就可以了。在我们启动的这个编译后的HTTP服务器里,只有SourceRoot指定的代码库才是可以访问的。想当年我因为这个问题烦恼了很久,因为没有指定这个配置项,导致所有的代码都不可见,结果就是访问什么东西都是无法访问错误,郁闷了老半天。

OK,hiphop的research就在如此初级的阶段暂时告一段落,以后有时间有需求我会继续的。