Loading... <p style="margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit;margin-top: 0px !important"><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>Note:</strong></span> These code examples assume the HipHop compiler is fully built.</p> <h2 style="margin: 0px;padding: 0px;font-size: 14px">1 . Setting Up Your Environment (构建环境)</h2> <p style="margin-top: 0px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">To get started, you need to configure two environment variables.</p> <pre class="brush:python;toolbar:false">cd .. # into the root of the hphp checkout export HPHP_HOME=`pwd` export HPHP_LIB=`pwd`/bin # if you followed the Ubuntu 9.10 instructions, you also need export CMAKE_PREFIX_PATH=`/bin/pwd`/../</pre> <h2 style="margin: 0px;padding: 0px;font-size: 14px">2 . Choosing which Mode to Run HipHop (HipHop运行模式)</h2> <p style="margin-top: 0px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">You can run HipHop in 5 different modes. These Hello World examples demonstrate each one. All commands are run from the src/ directory in these examples.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">First, create a file called test.php. Populate it with some text, like, “echo Hello, World! > test.php”. Then choose from the following modes:</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong> Mode 1 (<span style="font-family: Helvetica, arial, freesans, clean, sans-serif"><strong>直接运行模式 </strong></span>):</strong></span> Compiling HipHop and running it directly. <span style="font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"> </span></p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"></span></p> <pre class="brush:python;toolbar:false">echo "Hello, World!" > test.php hphp/hphp test.php</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong> Mode 2 (<span style="font-family: Helvetica, arial, freesans, clean, sans-serif"><strong>命令行运行编译程序 </strong></span>):</strong></span> Compiling HipHop in a temporary directory and running the compiled program from the command line. </p> <pre class="brush:python;toolbar:false">hphp/hphp test.php --keep-tempdir=1 --log=3 /tmp/hphp_p6vSsP/program (use your own temporary directory name from output)</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><code>--keep-tempdir=1</code> can also be specified with <code>-k 1</code>. Note it’s single dash and there is a space, not “=” between “k” and “1”. This is something to watch out when working with boost command line options.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><code>--log=3</code> outputs some verbose information, so you can find out which temporary directory it created. You may always specify your own output directory with <code>--output-dir=mypath</code> or <code>-o mypath</code>.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong> Mode 3 (<span style="font-family: Helvetica, arial, freesans, clean, sans-serif"><strong>使用web 运行编译模程序 )</strong></span>:</strong></span> Compiling HipHop in a temporary directory and running the compiled program as a web server.</p> <pre class="brush:python;toolbar:false">hphp/hphp test.php --keep-tempdir=1 --log=3 sudo /tmp/hphp_p6vSsP/program -m server</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">Then, from another window, run:</p> <pre class="brush:python;toolbar:false">curl localhost/test.php</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">If you don’t want to use sudo, you can run HipHop on port 8080.</p> <pre class="brush:python;toolbar:false">hphp/hphp test.php --keep-tempdir=1 --log=3 /tmp/hphp_p6vSsP/program -m server -p 8080 curl http://localhost:8080/test.php</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">Run this command to administer your server:</p> <pre class="brush:python;toolbar:false">curl http://localhost:8080</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">You can also run the server as a daemon:</p> <pre class="brush:python;toolbar:false">sudo /tmp/hphp_p6vSsP/program -m daemon</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong> Mode 4 (直接解释运行):</strong></span> Interpreting HipHop directly.</p> <pre class="brush:python;toolbar:false">hphpi/hphpi -f test.php (note the "-f" flag)</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>Mode 5 (web服务器运行源代码):</strong></span> Starting a Web server or daemon and interpreting HipHop on the fly.</p> <pre class="brush:python;toolbar:false">sudo hphpi/hphpi -m server (or daemon) curl localhost/test.php curl localhost:8088</pre> <p style="font-size: 14px">说明:<br /><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">curl localhost/test.php其实就是客户端浏览器访问模式,好多人都问hiphop怎么和web服务器结合? </span></p> <p style="font-size: 14px"><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">我们前面安装了库libevent。而PHP也能直接使用libevent构建web服务器.<br /></span></p> <p style="font-size: 14px"><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">其实HipHop可以当作web服务器来运行,说白了</span><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">hphpi/hphpi -m server</span><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">就是监听个端口守护进程,默认是80端口。</span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">命令</span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">我的安装目录是/opt/hiphop/hiphop-php/</span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">如图:</span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif"><img src="//cto.wang/usr/uploads/2016/07/20160703145017-95.jpg" title="1428657917135915.jpg" alt="1.jpg" /></span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">1)</span><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">sudo src/hphpi/hphpi -m server相当apache的守护进程启动,并监听80端口。</span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">2)目录/opt/hiphop/hiphop-php/相当于apache的web根目录</span><span style="font-family: Helvetica, arial, freesans, clean, sans-serif"> </span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif">3)在这个目录下可以新建文件</span></p> <p><span style="font-family: Helvetica, arial, freesans, clean, sans-serif"> test.php,内容如下:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703145017-70.jpg" title="1428657925238991.jpg" alt="2.jpg" /></p> <p> 使用浏览器访问:</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703145017-90.jpg" title="1428657937501371.jpg" alt="3.jpg" /></p> <p> 再新建test文件夹,</p> <p> cp test.php test/ </p> <p> 访问结果:</p> <p> <img src="//cto.wang/usr/uploads/2016/07/20160703145017-73.jpg" title="1428657945140619.jpg" alt="4.jpg" /></p> <h2 style="margin: 0px;padding: 0px;font-size: 14px">3. Compiling a Large Codebase (编译代码库)</h2> <p style="margin-top: 0px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">First, familiarize yourself with the various of switches of the compiler:</p> <pre class="brush:python;toolbar:false">hphp/hphp --help</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">There are 3 ways to specify some flags. </p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">(1) by a configuration file in <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">HDF</span> format. Please read doc/hdf for more details with the format. Then use<code>--config</code> to specify the config file. </p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">(2) For almost every option in <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">HDF</span> file, you can list it directly in its dot notation format. For example,<code>-v "node.subnode=value"</code>. </p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">(3) We created some shortcuts for most frequently used ones. They will look like <code>--force</code>.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">The most important flags to learn are the ones for including or excluding files and directories. They were not designed cleanly and we may have to improve the way how they work. When in doubt, simply use the <code>--input-list</code> switch to take a list of file names prepared in a separate file.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">You can get all the possible flags here: Runtime options</p> <h3 style="margin: 0px;padding: 0px;font-size: 14px">Using Parse-on-demand Mode (optional)</h3> <p style="margin-top: 0px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">You can include files that are not specified from the command line into the compilation <span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>only</strong></span> if the compiler can determine where to find them. This means your include statements themselves are either:</p> <ul style="margin-top: 15px;margin-bottom: 15px;padding: 0px 0px 0px 30px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit" class=" list-paddingleft-2"> <li> <p>Formed by simple literals; so the compiler can compute them during compilation time.</p> </li> <li> <p>Written in simple form like <code>"include_once $MY_ROOT.'/path/file.php';"</code><br /><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>Note:</strong></span> You can tell the compiler where to look for $MY_ROOT by creating a configuration file with content like this:</p> </li> </ul> <pre class="brush:python;toolbar:false">IncludeRoots { * { root = $MY_ROOT path = lib/my_code } * { root = $ANOTHER_ROOT path = anotherlib } }</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">Use <code>--config</code> to include this configuration file. The compiler resolves the above include statement as “lib/my_code/path/file.php”.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>Note:</strong></span> If you find parse-on-demand mode difficult to configure, try using <code>--input-list</code> to include every <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">PHP</span> file you want to compile.</p> <h3 style="margin: 0px;padding: 0px;font-size: 14px;font-family: Helvetica, arial, freesans, clean, sans-serif">Using distcc</h3> <p style="margin-top: 0px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">For large compilations, we recommend setting up distcc.</p> <h2 style="margin: 0px;padding: 0px;font-size: 14px">4 . Example: Compiling PHPUnit</h2> <p style="margin-top: 0px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>1. </strong>Check out PHPUnit’s <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">PHP</span> files:</p> <pre class="brush:python;toolbar:false;">git clone git://github.com/sebastianbergmann/phpunit.git cd phpunit git checkout -b 3.4 origin/</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>2.</strong> We will use the safest and the cleanest way to specify input files,</p> <pre class="brush:python;toolbar:false">find . -name "*.php" > files.list</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">This prepares a list of all <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">PHP</span> files we want to compile.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>3.</strong> Now we’re ready to compile the project.</p> <pre class="brush:python;toolbar:false">$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 \ --include-path="." --force=1 --cluster-count=50 \ -v "AllDynamic=true" -v "AllVolatile=true"</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><code>-k 1</code> or <code>--keep-tempdir=1</code> so it creates a new temporary directory every time. This is convenient when you’re experimenting the compilation.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">The <code>--include-path</code> is needed, because PHPUnit has file includes relative to root directory of phpunit. Without specifying this option, all includes in a format of “include ‘somepath/file.php’;” will be treated as relative path to the containing file.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><code>--force=1</code> is needed to ignore warnings and errors HipHop found in the code. Without this option, the compiler will halt and dump out the errors on the screen, if any. With <code>--force=1</code>, those errors will mostly turn into run-time ones, and you may still find them in CodeError.js generated under the output directory.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><code>--cluster-count=50</code> helps compilation, with or without distcc. Without this flag, each <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">PHP</span> file generates one .cpp file. When the number of <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">PHP</span>files is large, we may end up with too many .cpp files to compile. With clustering, no matter how many <span class="caps" style="margin: 0px;padding: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">PHP</span> files we have, HipHop will generate roughly the specified number of .cpp files, so it’s easier to feed them into distcc with fewer rounds. What we found is, cluster count should be slightly smaller than number of distcc workers. For example, if you have 20 machines each with 8 distcc workers, cluster count of 100 may be suitable. But one should change the numbers up and down to compare compilation time to find out the optimal value.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><code>-v "AllDynamic=true"</code> With this option, we can support dynamic function calls and dynamic method calls without any problems. Recommended to turn on, if coding has them. It will sacrifice performance a little bit, but it’s safe to have it.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><code>-v "AllVolatile=true"</code> With this option, we can support dynamic declarations of functions and classes without any problems. This is not recommended to turn on, unless your coding has crazy testing of <code>function_exists()</code> or <code>class_exists()</code> before or after declarations and the order is meaningful. PHPUnit happens to call <code>get_declared_classes()</code> before and after loading some class files and compare their returns to find new classes. Therefore, we need to add this switch to PHPUnit. Most likely, you don’t have to. It sacrifices performance in various degrees.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><strong>4.</strong> Now you should have a compiled PHPUnit binary. Report any problems to us, if you cannot reach this far. To run the binary,</p> <pre class="brush:python;toolbar:false">php phpunit.php (in PHP) /tmp/hphp_po33pK/program -f phpunit.php (in HipHop, note the -f flag) <pre name="code" class="cpp">php phpunit.php PHPUnit/Tests/Framework/SuiteTest.php /tmp/hphp_po33pK/program -v "Server.SourceRoot=`pwd`" \ -f phpunit.php PHPUnit/Tests/Framework/SuiteTest.php</pre> <pre></pre> <p></p> <pre></pre> <p></p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> Note that the compiled binary “program” has to run from the same directory you normally run <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">phpunit.php</code>, only because PHPUnit has<code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">file_exists()</code> testing that goes to local disk to look for some .php files. There is a way to remove this disk location dependency by building a static file cache, but we will leave that to some more advanced instructions.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> Also note that <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-v "Server.SourceRoot=`pwd`"</code> normally is not needed. But PHPUnit has quite a few file location based operations that will try to compare source file name with what’s on local disk with <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">realpath()</code> calls. So we had to add this one to run through the tests.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <strong>5. </strong>Some useful tips:</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> (1) If you just created a binary with <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">--keep-tempdir=1</code>, but forgot to copy the name, a simple command can normally find it,</p> <pre style="margin-top:15px; margin-bottom:15px; padding-top:6px; padding-right:10px; padding-bottom:6px; padding-left:10px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:13px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; background-color:rgb(248,248,248); border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(204,204,204); border-right-color:rgb(204,204,204); border-bottom-color:rgb(204,204,204); border-left-color:rgb(204,204,204); line-height:19px; overflow-x:auto; overflow-y:auto"><code style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; border-top-style:none; border-right-style:none; border-bottom-style:none; border-left-style:none; background-color:transparent; border-width:initial; border-color:initial; border-width:initial; border-color:initial">ls -altrd /tmp/hphp_* | tail -1</code></pre> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> (2) You may run out of disk space with too many temporary directories. Just rm all HipHop temps like this,</p> <pre style="margin-top:15px; margin-bottom:15px; padding-top:6px; padding-right:10px; padding-bottom:6px; padding-left:10px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:13px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; background-color:rgb(248,248,248); border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(204,204,204); border-right-color:rgb(204,204,204); border-bottom-color:rgb(204,204,204); border-left-color:rgb(204,204,204); line-height:19px; overflow-x:auto; overflow-y:auto"><code style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; border-top-style:none; border-right-style:none; border-bottom-style:none; border-left-style:none; background-color:transparent; border-width:initial; border-color:initial; border-width:initial; border-color:initial">rm -fR /tmp/hphp_*</code></pre> <h2><a name="t10"></a>5 . Example: Running PHPUnit under HPHPi</h2> <div><pre name="code" class="csharp">$HPHP_HOME/src/hphpi/hphpi -f phpunit.php $HPHP_HOME/src/hphpi/hphpi -f phpunit.php PHPUnit/Tests/Framework/SuiteTest.php</pre></div> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <span style="color:red">Haiping: We can pass all in SuiteTest.php, but we do have several other tests under PHPUnit/Tests/Framework that we’re not able to fully pass yet, due to some local disk assumption in PHPUnit and perhaps some minor bugs. Still debugging to see if we can fix all these issues.</span></p> <h2><a name="t11"></a>6 . Example: Compiling WordPress</h2> <p style="line-height:1.6; margin-top:0px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <strong>1.</strong> Get a copy of WordPress. Please note, we identified 2 or 3 problems with WordPress that need to be fixed before HipHop can compile it. These have been fixed in trunk of the Wordpress <span class="caps" style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit">SVN</span> but not backported.</p> <p style="line-height:1.6; margin-top:0px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> </p> <pre name="code" class="cpp">wget http://wordpress.org/latest.tar.gz tar zxvf wordpress-2.9.1.tar.gz cd wordpress </pre> <p></p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <strong>2.</strong> Create a config.php, perhaps by copying config.sample.php and set up database information. This file needs to be prepared <span class="caps" style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit">BEFORE</span> the compilation, so it’s compiled into the final binary. Any changes of this file need a re-compilation of the whole package. <span class="caps" style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit">NOTE</span>: use the loopback interface (typically ‘127.0.0.1’) instead of ‘localhost’; see <a href="http://groups.google.com/group/hiphop-php-dev/msg/4ca5cef95367be03?" style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit; color:rgb(65,131,196); text-decoration:none">this thread</a> on the mailing list for an explanation.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <strong>3.</strong> This prepares a list of all <span class="caps" style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit">PHP</span> files we want to compile:</p> <pre style="margin-top:15px; margin-bottom:15px; padding-top:6px; padding-right:10px; padding-bottom:6px; padding-left:10px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:13px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; background-color:rgb(248,248,248); border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(204,204,204); border-right-color:rgb(204,204,204); border-bottom-color:rgb(204,204,204); border-left-color:rgb(204,204,204); line-height:19px; overflow-x:auto; overflow-y:auto"><code style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; border-top-style:none; border-right-style:none; border-bottom-style:none; border-left-style:none; background-color:transparent; border-width:initial; border-color:initial; border-width:initial; border-color:initial">find . -name "*.php" > files.list</code></pre> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <strong>4. </strong>Now we’re ready to compile the project.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> </p> <pre name="code" class="cpp">$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 \ --force=1 --cluster-count=50</pre> <p></p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> This is simpler than PHPUnit, because WordPress doesn’t have as much dynamic coding as PHPUnit does.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <strong>5.</strong> Now you should have a compiled binary. To run it,</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> </p> <pre name="code" class="cpp">sudo /tmp/hphp_xpl7hT/program -m server -v "Server.SourceRoot=`pwd`" \ -v "Server.DefaultDocument=index.php" -c $HPHP_HOME/bin/mime.hdf</pre> <p></p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">sudo</code> because we need to listen to port 80, the only port WordPress works on.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-m server</code> runs the program in server mode. <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-m daemon</code> is okay as well.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-v "Server.SourceRoot=`pwd`"</code> We still need this to locate image and css files.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-v "Server.DefaultDocument=index.php"</code>, so http://server/ would work.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-c $HPHP_HOME/bin/mime.hdf</code> has a list of static content file extensions that need to be loaded by the server to be able to serve those files with different <span class="caps" style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit">MIME</span> headers.</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> If you want to see verbose logging, add these flags,</p> <p style="line-height:1.6; margin-top:15px; margin-bottom:15px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; font-size:14px; font:inherit"> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-v "Log.Level=Verbose"</code> This will output a lot more errors, warnings and information.<br> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-v "Log.NoSilencer=on"</code> This prints out errors from statements that have “@” operators, which WordPress code uses a lot.<br> <code style="margin-top:0px; margin-right:2px; margin-bottom:0px; margin-left:2px; padding-top:0px; padding-right:5px; padding-bottom:0px; padding-left:5px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; white-space:nowrap; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(234,234,234); border-right-color:rgb(234,234,234); border-bottom-color:rgb(234,234,234); border-left-color:rgb(234,234,234); background-color:rgb(248,248,248)">-v "Log.Header=on"</code> This will print a header for each line of logging. The most interesting in the header is a long string with hex-encoding. That’s hex-encoded stacktrace. To translate it into something readable, run this command,</p> <pre style="margin-top:15px; margin-bottom:0px!important; padding-top:6px; padding-right:10px; padding-bottom:6px; padding-left:10px; border-top-width:1px; border-right-width:1px; border-bottom-width:1px; border-left-width:1px; border-style:initial; border-color:initial; font-size:13px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; background-color:rgb(248,248,248); border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-left-style:solid; border-top-color:rgb(204,204,204); border-right-color:rgb(204,204,204); border-bottom-color:rgb(204,204,204); border-left-color:rgb(204,204,204); line-height:19px; overflow-x:auto; overflow-y:auto"><code style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; border-style:initial; border-color:initial; font-size:12px; font:normal normal normal 12px/normal 'Bitstream Vera Sans Mono',Courier,monospace; border-top-style:none; border-right-style:none; border-bottom-style:none; border-left-style:none; background-color:transparent; border-width:initial; border-color:initial; border-width:initial; border-color:initial">/tmp/hphp_xpl7hT/program -m translate the-long-hex-string-without-brackets </code></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> <pre></pre> Last edited by pierregoudjo, 3 months ago</pre> <p>官方安装文档:https://github.com/facebook/hiphop-php/wiki/Building-and-Installing-on-Ubuntu-11.10</p> <p>稍微做一些修改而已.</p> <h1 class="instapaper_title" style="margin: 0px;padding: 2px 0px 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;float: left;line-height: normal"><span style="font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit">Building and Installing on Ubuntu 11.10</span><br /></h1> <ul class="wiki-actions readability-extra list-paddingleft-2"> <li> <p><span style="margin: 0px;padding: 0px 9px 0px 7px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;height: 23px;line-height: 23px">Page History</span></p> </li> </ul> <h3 style="margin: 0px;padding: 0px;font-size: 18px;line-height: 1.6"><span style="line-height: 1.6">1、Packages installation (</span><span style="line-height: 1.6">安装依赖的包):</span></h3> <ul style="margin-top: 15px;margin-bottom: 15px;padding: 0px 0px 0px 30px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit" class=" list-paddingleft-2"> <li> <p>cmake <span style="margin: 0px;padding: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">2.6 is the minimum version</span></p> </li> <li> <p>g++/gcc <span style="margin: 0px;padding: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">4.3 is the minimum version</span></p> </li> <li> <p>Boost <span style="margin: 0px;padding: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">1.37 is the minimum version</span></p> </li> <li> <p>flex</p> </li> <li> <p>bison</p> </li> <li> <p>re2c</p> </li> <li> <p>libmysql</p> </li> <li> <p>libxml2</p> </li> <li> <p>libmcrypt</p> </li> <li> <p>libicu <span style="margin: 0px;padding: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">4.2 is the minimum version</span></p> </li> <li> <p>openssl</p> </li> <li> <p>binutils</p> </li> <li> <p>libcap</p> </li> <li> <p>gd</p> </li> <li> <p>zlib</p> </li> <li> <p>tbb <span style="margin: 0px;padding: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">Intel's Thread Building Blocks</span></p> </li> <li> <p>Oniguruma</p> </li> <li> <p>libpcre</p> </li> <li> <p>libexpat</p> </li> <li> <p>libmemcached</p> </li> </ul> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">The following packages have had slight modifications added to them. Patches are provided and should be made against the current source copies.</p> <ul style="margin-top: 15px;margin-bottom: 15px;padding: 0px 0px 0px 30px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit" class=" list-paddingleft-2"> <li> <p>libcurl</p> </li> <li> <p>src/third_party/libcurl.fb-changes.diff</p> </li> <li> <p>libevent 1.4</p> </li> <li> <p>src/third_party/libevent-1.4.13.fb-changes.diff OR src/third_party/libevent-1.4.14.fb-changes.diff</p> </li> </ul> <p style="margin-top: 0px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">Using sudo or as root user:</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit"><span style="margin: 0px;padding: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">As outlined in the 11.04 instructions plus the addition of the required libcloog-ppl0 package for 11.10</span></p> <pre class="brush:python;toolbar:false">sudo apt-get install git-core cmake g++ libboost-dev libmysqlclient-dev libxml2-dev libmcrypt-dev libicu-dev openssl build-essential 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 libbz2-dev libc-client2007e-dev php5-mcrypt php5-imagick libgoogle-perftools-dev libcloog-ppl0</pre> <h3 style="margin: 0px;padding: 0px;font-family: Arial;line-height: 26px"><span style="font-family: Helvetica, arial, freesans, clean, sans-serif"><span style="line-height: 1.6">2、Getting HipHop source-code(</span></span>获取HipHop源码包<span style="font-family: Helvetica, arial, freesans, clean, sans-serif;font-size: 18px;line-height: 1.6">)</span></h3> <h3 style="margin: 0px;padding: 0px;font-family: Arial;line-height: 26px"><span style="font-family: sans-serif;font-size: 16px"></span></h3> <pre class="brush:python;toolbar:false">mkdir dev cd dev git clone git://github.com/facebook/hiphop-php.git cd hiphop-php export CMAKE_PREFIX_PATH=`pwd` export HPHP_HOME=`pwd` export HPHP_LIB=`pwd`/bin cd ..</pre> <h3 style="margin: 0px;padding: 0px;font-family: Arial;line-height: 26px">3. Building third-party libraries 安装第三方库</h3> <h4 style="margin: 0px;padding: 0px;font-family: Arial;font-size: 14px;line-height: 26px">1) libevent</h4> <pre class="brush:python;toolbar:false">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 ..</pre> <h4 style="margin: 0px;padding: 0px;font-family: Arial;font-size: 14px;line-height: 26px"> 2) libCurl 安装libcurl</h4> <p><span style="font-family: Arial;font-size: 14px;line-height: 26px">Make sure that your system time is correct, otherwise ./configure will fail.(</span>确保系统时间正确,否则 ./configure 会出错.<span style="font-family: Arial;font-size: 14px;line-height: 26px">)</span></p> <p><span style="font-family: Arial;font-size: 14px;line-height: 26px"></span></p> <pre class="brush:python;toolbar:false">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</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">As per: https://github.com/bagder/curl/commit/26b487a5d6ed9da5bc8e4a134a88d3125884b852</p> <ul style="margin-top: 15px;margin-bottom: 15px;padding: 0px 0px 0px 30px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit" class=" list-paddingleft-2"> <li> <p>Edit lib/ssluse.c</p> </li> </ul> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">As per: https://github.com/facebook/hiphop-php/issues/319#issuecomment-1445537</p> <ul style="margin-top: 15px;margin-bottom: 15px;padding: 0px 0px 0px 30px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit" class=" list-paddingleft-2"> <li> <p>Edit runtime/ext/extension.cpp</p> </li> </ul> <p>make </p> <p>make install </p> <p>cd .. </p> <p> </p> <h4 style="margin: 0px;padding: 0px;font-family: Arial;font-size: 14px;line-height: 26px">3 )libmemcached (安装libmemcached库)</h4> <ol start="1" class="dp-cpp list-paddingleft-2"> <li> <p><span style="margin: 0px;padding: 0px;border: none;color: black;background-color: inherit"><span style="margin: 0px;padding: 0px;border: none;background-color: inherit">wget http:</span><span class="comment">//launchpad.net/libmemcached/1.0/0.49/+download/libmemcached-0.49.tar.gz </span><span style="margin: 0px;padding: 0px;border: none;background-color: inherit"> </span></span></p> </li> <li> <p><span style="margin: 0px;padding: 0px;border: none;color: black;background-color: inherit">tar -xzvf libmemcached-0.49.tar.gz </span></p> </li> <li> <p><span style="margin: 0px;padding: 0px;border: none;color: black;background-color: inherit">cd libmemcached-0.49 </span></p> </li> <li> <p><span style="margin: 0px;padding: 0px;border: none;color: black;background-color: inherit">./configure –prefix=$CMAKE_PREFIX_PATH </span></p> </li> <li> <p><span style="margin: 0px;padding: 0px;border: none;color: black;background-color: inherit"></span></p> </li> <li> <pre class="brush:python;toolbar:false">make make install cd ..</pre> </li> </ol> <h3 style="margin: 0px;padding: 0px;font-family: Arial;line-height: 26px"><span style="font-family: Helvetica, arial, freesans, clean, sans-serif;font-size: 18px"><span style="line-height: 1.6">4. Building HipHop</span><span style="line-height: 37px">(安装Hiphop)</span></span></h3> <pre class="brush:python;toolbar:false">cd hiphop-php git submodule init git submodule update cmake . make</pre> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">hphp binary can be found in src/hphp folder and is called hphp</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">If any errors occur, it may be required to remove the CMakeCache.txt directory in the checkout.</p> <p style="margin-top: 15px;margin-bottom: 15px;padding-top: 0px;padding-bottom: 0px;border-width: 0px;font-family: inherit;font-size: inherit;font-style: inherit;font-variant: inherit;font-weight: inherit;line-height: inherit">If your failure was on the <code>make</code> command, try to correct the error and run <code>make</code> again, it should restart from the point it stops. If don’t, try to remove as explained above.</p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信