First steps with hhvm

First steps with hhvm

UPDATE (04/2014): Since Facebook decided to remove the webserver functionality from the "official" binaries this howto will not work anymore! Read here how to set things up with the current version of hhvm.

After reading all the buzz about hhvm I thought I should give it a try to see what it is all about. Following my current no-local-installs policy I used the following vagrant configuration to set up a new virtual machine for hhvm.

Vagrant.configure("2") do |config|
  config.vm.define "box" do |box_cfg|      = 'debian-wheezy'
    box_cfg.vm.box_url  = ''
    box_cfg.vm.hostname = "hhvm"
    # Forward a port from the guest to the host :forwarded_port, guest: 80, host: 8080
    # share folder to the guest VM
    box_cfg.vm.synced_folder ".", "/vagrant", owner: "www-data", group: "vagrant"

Installing hhvm on a Debian Wheezy box is pretty straight forward. It boils down to the following commands which you need to execute as root user:

wget -O - | apt-key add -
echo deb wheezy main | tee /etc/apt/sources.list.d/hhvm.list
apt-get update
apt-get install hhvm

Since I already had the PHP CLI package installed I needed to point the /usr/bin/php symlink to the hhvm binary. Instead of changing the symlink manually I used Debians update-alternatives command:

update-alternatives --install /usr/bin/php php /usr/bin/hhvm 1

To configure the hhvm server I needed a config.hdf file that looks like this. If you want to use a different port number you need to change the setting in the Vagantfile above as well:

Server {
  Port = 80
  SourceRoot = /vagrant/webroot/
  DefaultDocument = index.php

Eval {
  Jit = true

Log {
  Level = Error
  UseLogFile = true
  File = /var/log/hhvm/error.log
  Access {
    * {
      File = /var/log/hhvm/access.log
      Format = %h %l %u %t \"%r\" %>s %b

VirtualHost {
  * {
    Pattern = .*
    RewriteRules {
      dirindex {
        pattern = ^/(.*)/$
        to = $1/index.php
        qsa = true

StaticFile {
  FilesMatch {
    * {
      pattern = .*\.(dll|exe)
      headers {
        * = Content-Disposition: attachment
  Extensions {
    css = text/css
    gif = image/gif
    html = text/html
    jpe = image/jpeg
    jpeg = image/jpeg
    jpg = image/jpeg
    png = image/png
    tif = image/tiff
    tiff = image/tiff
    txt = text/plain

Starting the server was just a matter of the following command:

hhvm -m server -c config.hdf

Last but not least I had to create a simple PHP file in /vagrant/webroot/index.php. By pointing my browser to http://localhost:8080 I was able to view my first PHP script running on hhvm. Whilst web request work fine I am still struggling with getting PHPUnit to execute my test cases. When running PHPUnit on the command line it seems that it is not able to find unit tests. Seems I need to investigate in that issue.

Eintrag von Stephan Hochdörfer am 09.01.2014


Diese Webseite verwendet Cookies, um die Bedienfreundlichkeit zu erhöhen. Mit der Nutzung unserer Webseite wird das Einverständnis erklärt, dass wir Cookies verwenden. Weitere Informationen.