Postanowiłem opisać instalację oraz sposób użycia tego kompilatora, gdyż nie znalazłem zbyt wielu materiałów w języku polskim na ten temat.
Na początek uaktualniamy istniejące oprogramowanie:
sudo apt-get update sudo apt-get upgrade
Pobieramy niezbędne programy oraz biblioteki:
sudo apt-get install git-core cmake g++ libboost-dev libmysqlclient-dev libxml2-dev libmcrypt-dev libicu-dev openssl binutils-dev libcap-dev libgd2-xpm-dev zlib1g-dev libtbb-dev libonig-dev libpcre3-dev autoconf libtool libcurl4-openssl-dev libboost-system-dev libboost-program-options-dev libboost-filesystem-dev wget memcached libreadline-dev libncurses-dev libmemcached-dev libicu-dev libbz2-dev libc-client2007e-dev php5-mcrypt php5-imagick
Teraz tworzymy na dysku katalog, do którego będziemy pobierali wszystkie potrzebne do instalacji pliki:
mkdir sources cd sources
Wszystkie polecenia należy uruchamiać właśnie z tego katalogu. Skrypty będą automatycznie powracać do katalogu, z którego zostały wywołane.
Pobieramy źródła kompilatora (w chwili obecnej zajmują ok. 23 MB):
git clone git://github.com/facebook/hiphop-php.git cd hiphop-php export CMAKE_PREFIX_PATH=`/bin/pwd`/../ export HPHP_HOME=`/bin/pwd` export HPHP_LIB=`/bin/pwd`/bin cd ..
HipHop for PHP potrzebuje również bibliotek „libevent” oraz „curl”. Nie instalujemy ich jednak z oficjalnych repozytoriów, gdyż obie wymagają poprawek wprowadzonych przez programistów Facebooka.
Kompletne skrypty instalujące obie biblioteki poniżej:
wget http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz tar -xzvf libevent-1.4.14b-stable.tar.gz cd libevent-1.4.14b-stable cp ../hiphop-php/src/third_party/libevent-1.4.14.fb-changes.diff . patch -p1 < libevent-1.4.14.fb-changes.diff ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd ..
wget http://curl.haxx.se/download/curl-7.21.2.tar.gz tar -xvzf curl-7.21.2.tar.gz cd curl-7.21.2 cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff . patch -p1 < libcurl.fb-changes.diff ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd ..
Teraz czas na kompilację kompilatora. Osobom które testują HipHopa na maszynie wirtualnej polecam uprzednie przydzielenie trochę większej ilość pamięci RAM niż zwykle. W przeciwnym wypadku system będzie korzystał z pliku wymiany co znacząco wydłuży cały proces.
HipHop był tworzony dla systemów 64-bitowych. W chwili obecnej wsparcie dla 32-takich systemów jest eksperymentalne i nie wszystko może poprawnie działać.
cd hiphop-php cmake . make
Po zakończonej kompilacji dodamy alias, aby nie trzeba było za każdym razem wpisywać pełnej ścieżki do programu:
alias hphp=`pwd`/src/hphp/hphp
Teraz czas na test. Przed rozpoczęciem pracy z kompilatorem należy zdefiniować trzy zmienne. Zrobiliśmy już to wcześniej, ale podam odpowiednie polecenia jeszcze raz:
export HPHP_HOME=`pwd` export HPHP_LIB=`pwd`/bin export CMAKE_PREFIX_PATH=`/bin/pwd`/../
W chwili obecnej struktura katalogów wygląda u mnie w taki sposób:
. ├── bin ├── curl-7.21.2 ├── curl-7.21.2.tar.gz ├── hiphop-php ├── include ├── lib ├── libevent-1.4.14b-stable ├── libevent-1.4.14b-stable.tar.gz ├── php_files └── share 8 directories, 2 files
Na dysku tworzymy katalog, a w nim przykładowy skryptem PHP, który wypisze słowa „Hello, World” na ekranie (zakładam, że nadal znajduje się w katalogu „hiphop-php”):
cd .. mkdir php_files cd php_files echo "<?php echo 'Hello, World', \"\n\";" > test.php php test.php
Najprostszym sposobem na uruchomienie kompilatora jest uruchomienie programu hphp:
hphp test.php
Drugi sposób uruchamiania kompilatora zachowuje skompilowane programy w katalogach tymczasowych co pozwala na późniejsze uruchomienie aplikacji oraz podgląd źródeł C++:
hphp test.php --keep-tempdir=1 --log=3
Na ekranie powinniśmy uzyskać podobny wydruk:
running hphp... creating temporary directory /tmp/hphp_BZhZSg ... parsing inputs... parsing inputs took 0'00" (15 ms) (null) pre-optimizing... pre-optimizing took 0'00" (2 ms) (null) inferring types... inferring types took 0'00" (0 ms) (null) post-optimizing... post-optimizing took 0'00" (2 ms) (null) creating CPP files... creating CPP files took 0'00" (154 ms) (null) compiling and linking CPP files... compiling and linking CPP files took 3'44" (224574 ms) (null) running executable /tmp/hphp_BZhZSg/program --file test.php... Hello, World all files saved in /tmp/hphp_BZhZSg ...
Jak widać skrypt skompilował oraz uruchomił się poprawnie. Ostatnia linia zawiera katalog, w którym znajduje się skompilowany program oraz źródła. Interesujący jest rozmiar pliku wykonywalnego. Plik zajmuje ok. 25 MB, choć jego jedynym zadaniem jest wypisanie tekstu na ekranie ;)
Teraz możemy uruchomić aplikację:
/tmp/hphp_BZhZSg/program
oraz podejrzeć źródła C++:
cat /tmp/hphp_BZhZSg/php/test.cpp
Program możemy uruchomić również jako serwer. Do tego celu służy polecenie:
sudo /tmp/hphp_BZhZSg/program -m server -p 8080
Powinniśmy uzyskać potwierdzenie uruchomienia serwera. Teraz wystarczy odwiedzić poniższy adres w przeglądarce, aby uruchomić aplikację:
http://localhost:8080/test.php
Tak uruchomionym serwerem możemy sterować przy pomocy wiersza poleceń. Pełną listę poleceń znajdziemy pod adresem (korzystam z polecenia curl, gdyż wydruk jest czytelniejszy w konsoli):
curl http://localhost:8088
Serwer zatrzymujemy poleceniem „stop”:
curl http://localhost:8088/stop
Po pełną listę poleceń oraz więcej przykładów użycia odsyłam w chwili obecnej na oficjalne Wiki.
Linki
https://github.com/facebook/hiphop-php/wiki/Building-and-Installing-on-Ubuntu-10.10
https://github.com/facebook/hiphop-php/wiki/Running-HipHop
http://php.webtutor.pl/en/2011/05/17/drupal-hiphop-for-php-vs-apc-benchmark/