Ấy là đối với tôi, không biết với các bạn ra sao. Chứ riêng tôi, đành tạm ngưng dự án này lại, đợi xem tình hình vài tháng tiếp ra sao. Vì hiện tại quá ư là *unstable*.
Cài trên Gentoo không sao, nhưng ý định compile lên system CentOS/RHEL có lẽ đã thất bại. Ban đầu tôi thử với các RPM tại
sourceforge, sau đó với
RPM tôi tự modified/build dựa trên các SRPM cũ. Các bạn có thể tự build lấy hoặc xài có sẵn cũng được. Nhớ
yum các rpm thiếu như yêu cầu. Chỉ riêng đối với hphp, tôi khuyến cáo các bạn lấy SRPM về rồi rebuild lại. Tôi có 2 bản: 1 bản thường, và 1 bản để chạy với nginx (Chuyển X_REAL_IP sang REMOTE_IP để không phải sửa quá nhiều code PHP khi chạy).
rpmbuild --rebuild --target=x86_64 hiphop-php-1.0-2.20100308.el5.src.rpm
Do build trên
kernel custom (2.6.29 để sử dụng AIO) nên khi build tôi gặp lỗi với
capability.cpp. Sau khi đọc tài liệu mới thấy rằng kernel không còn sử dụng
capability module nữa. Do đó phải upgrade lên libcap2 (2.19). Các bạn có thể yên tâm khi dùng
rpm --nodeps --force vì libcap2 có tương thích ngược với libcap1.
Các bạn không thể sử dụng boost-1.33 đi kèm với CentOS/RHEL 5.4, phiên bản có thể sử dụng được là 1.37,1.38,1.41. Các bạn không nên xài boost 1.42, có confirm từ cộng đồng Hiphop PHP là có
bug.
PHP packages: tại sao tôi không xài như rpm trên SourceForge? phiên bản SF xài là của Oracle Enterprise Linux. Nếu cài vô CentOS phát sinh ra khá nhiều dependency đi kèm. Do vậy tôi có build lại bộ riêng dựa trên CentOS Plus.
Các RPM còn lại, tôi có bỏ bớt các patch đi kèm trong SRPM(có recompile luôn cả GCC nhưng
không khuyến cáo các bạn sử dụng). Để các patch mặc định thậm chí không thể chạy hphp lên được.
Với những info trên, các bạn đã dư sức compile được hphp. Tuy nhiên, điều tôi muốn nói là phần biên dịch PHP -> C++.
Thực ra, trong tất cả trường hợp thử đơn giản php+mysql+mysqli+odbc+imap+gd+session và một số simple function thì hoạt động đúng.
Nhưng khi sử dụng thêm các module php khác như zip, xsl, pdo, mhash, bcmath, mcrypt thì tính năng code_optimization không thể hoạt động được (khi đến generate CPP files bị SEGFAULT) trên CentOS. Có thể liên quan tới các package re2c, bison, flex, mhash. Tôi không còn thời gian để thử lại các package này nên tôi bỏ qua.
hphp rất khó chịu với constant trong PHP. Đơn giản như ví dụ sau sẽ không thể nào compile được trên hphp. Do đó khi xài các constant chắc chắn các bạn sẽ gặp vấn đề với hphp. Ví dụ như sau:
<?
define('A', "B");
define('A_'.A, "B");
echo A_B;
?>
Các bạn sẽ gặp lỗi:
hphp: /usr/include/boost/smart_ptr/shared_ptr.hpp:418: T* boost::shared_ptr< <te mplate-parameter-1-1> >::operator->() const [with T = HPHP::BlockScope]: Asserti on `px != 0' failed.
Khi sử dụng hphp, nếu bị bất kỳ lỗi nào đó. Đầu tiên các bạn nên thử giảm thông số code optimization xuống hoặc có thể loại bỏ hẳn. (--optimize-level=0). Sau đó thử chạy với thông số
--target=analyze để xem info về code của mình. Có thể dựa vào đó để sửa lại các code PHP cho thích hợp (SameFunction, UndefinedVar, InvalidConstant...)
Một số ... trường hợp khó hiểu sau, tôi không giải thích được. Ví dụ dưới đây, file funcsv2.orig.php và funcsv2.php là 1 file. Nhưng nếu bỏ funcsv2.orig.php hoặc chuyển funcsv2.php lên ví trị đó thì hphp sẽ báo lỗi.
Server10 web # diff -y files.list files.list.worked
./login.php ./login.php
> ./funcsv2.orig.php
./config.php ./config.php
./index.php ./index.php
./admin.php ./admin.php
./announce.php ./announce.php
./scrape.php ./scrape.php
./torrent_functions.php ./torrent_functions.php
./sha1lib.php ./sha1lib.php
./seed.php ./seed.php
./funcsv2.php ./funcsv2.php
Lỗi với magic_function, (iamhuy thử cái này).
Khi code PHP, bật E_STRICT lên để còn hy vọng sử dụng được với hphp.
Khi đọc code CPP sinh ra, nếu thông số optimize-level=0, code sinh ra quả là... 1 đống rác. Do vậy không chắc hphp sẽ chạy nhanh hơn đâu nhé. Ngoài ra chưa kể bị memory leak (unconfirmed). Trong tuần tới tôi sẽ thử kết quả benchmark ra sao. Bao gồm Request/Reply Rate, CPU waste, mem waste/leak.
Dù sao, tôi cũng sẽ tạm ngưng nghiên cứu sâu thêm về hphp. Hiện hphp chỉ hoạt động tốt với "Simple PHP Code". Tôi nghĩ các CMS đơn giản hiện nay hầu hết sẽ hoạt động được. Còn để như target tôi muốn thì còn xa, sẽ quay lại với hphp sau khoảng 3 tháng nữa :D
Vui lòng reference nếu sử dụng tài liệu này để tham khảo cho công việc của bạn.