從頭開始編譯 PHP 5.5
總是有些操作系統(tǒng)的(PHP)軟件包落后于PHP***版本的PHP,比如Ubuntu。這種落后意味著你要等待一年甚至更長時間,才能更新到***、最偉大的PHP版本,除非你使用外部的庫如Dotdeb。當然,即使你使用了外部庫,你會發(fā)現(xiàn)很多安全性和錯誤修正仍然有些滯后。
相反,我采用自已制作的PHP版本。這非常容易就能做到,并且任何開發(fā)人員都能做到。本文中我介紹了如何在Ubuntu中做一個***的(PHP包)。
為什么考慮“推出(rolling)你自已的”PHP安裝包
(Ubuntu)有很多的(一噸,a ton of)PHP軟件包。有些人選擇默認的包套件建成(PHP環(huán)境),還有一些人選擇Dotdeb。但是對于真正專業(yè)的PHP開發(fā)人員,了解如何針對他們的操作系統(tǒng)編譯安裝PHP是比較重要的。
在我的例子中,我想要使用***版本的PHP,因為我的工具( tools)經(jīng)常跟蹤(track )***的版本(PHPUnit,PHPMD,等等)。 因此,那些小的改進以對我很有用。
準備開始(Getting started)
需要指出的是,我從一個之前沒有安裝過Apache和PHP的Ubuntut系統(tǒng)開始,完全它是完全純凈的系統(tǒng)。如果你打算從一臺已安裝了這些軟件(PHP,Apache)的服務器開始,你需要修改你的說明(modify your instructions)。
我假設你以root身份運行這些命令,因此,這些命令中都不包含sudo。如果你使用的不是root身份,那么加上sudo(聲明適用于非root身份運行,除非你知道你在做什么)。
準備環(huán)境(Preparing the environment)
為了能正解安裝PHP,我們需要準備一些依賴包(dependencies)。
我喜歡有Apache,MySQL和Postgres的支持,所以我們要確保這些軟件已安裝,以便PHP能打到它們:
- aptitude install build-essential vim
- aptitude install apache2 apache2-mpm-prefork apache2-prefork-dev apache2-utils apache2.2-common
- aptitude install postgresql-9.1 postgresql-client-9.1 postgresql-client-common postgresql-common postgresql-server-dev-9.1
- aptitude install mysql-client mysql-client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 libmcrypt-dev curl openssl
注意,這里我還需要安裝一些其它的包,如:openssl,curl,libmcrypt-dev,以及build-essential (它對make和make install是必須的)。
安裝PHP依賴的包(Building the dependencies for PHP)
PHP還有很多其它有依賴關系的包,因此把這些都構建好是好重要的。慶幸的是,我們可以使用一條簡單的命令來構建這些PHP依賴的包:
- apt-get build-dep php5
這個命令會獲取并構建(安裝)所有PHP5所依賴的包。記住,你可以跳過這個步驟并自己安裝這些包,如果你愿意的話(或者你需要一些特殊的配置)。
如果你不運行這個命令或安裝這些依賴包(庫), 你會從PHP的配置命令中得到很多令人不愉快的錯誤。
配置并安裝PHP
一旦你處理完了這些依賴關系,接下來是時候來構建PHP了。當你下載完PHP5.5(可以從www.php.net得到***的RC1版本),解壓縮它并進入(解壓后的)目錄。
我喜歡在我安裝的PHP中使用漂亮的標準配置。 不過,這里也包含一些獨特的設置,我將解釋一下:
- –enable-opcache:這個配置是在5.5中新增的。Zend Opcache已被集成到PHP 5.5的核心中,這個配置用于在你編譯PHP 5.5時啟用opcache。它默認是禁用的。
- –prefix=/opt/php:prefix用來告訴安裝器PHP的安裝目錄。我使用 /opt/php 這樣所有的PHP文件都存儲在同一個地方。如果去掉這個選項,PHP會被安裝到操作系統(tǒng)指定的地方。
- –with-config-file-path=/opt::我發(fā)現(xiàn)在PHP 5.4中,如果不指定這項,PHP就無法找到INI文件。如果你愿意,你可以去除這個選項。
- ./configure --enable-opcache --prefix=/opt/php --with-apxs2=/usr/bin/apxs2 --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pgsql=/usr --with-tidy=/usr --with-curl=/usr/bin --with-openssl-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-pdo-pgsql=/usr --with-pdo-mysql=mysqlnd --with-xsl=/usr --with-ldap --with-xmlrpc --with-iconv-dir=/usr --with-snmp=/usr --enable-exif --enable-calendar --with-bz2=/usr --with-mcrypt=/usr --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --enable-mbstring --enable-zip --with-pear --with-libdir=/lib/x86_64-linux-gnu --with-config-file-path=/opt
當你運行完./configure命令后,你需要運行 make來編譯PHP。
- make
當make運行完成這后,系統(tǒng)會提示你運行make test。如果你編譯的是一個未發(fā)布的社區(qū)版本就要運行這個測試。報告你在測試時的任何故障。如果你遇到的故障,運行make干凈,并重新編譯。
運行完成make test之后,就可以安裝PHP了。運行make install將PHP安裝到你在配置中指定的目錄中。
- make install<span><span style="line-height:19px;"> </span></span>
配置Apache
當你從一個包中安裝PHP,通常都會在Apache中安裝相應的配置。不過,這是我的經(jīng)驗,為了使Apache識別PHP文件,我需要將正確的信息插入到Apache(的配置文件)中。下面這些就是我在apache.conf中的配置:
- <IfModule php5_module>
- AddType application/x-httpd-php .php
- AddType application/x-httpd-php .phps
- <IfModule dir_module>
- DirectoryIndex index.html index.php
- </IfModule>
- </IfModule>
在完成此配置后請務必重啟Apache。
善后(Cleaning up)
PHP不會自動的安裝一個INI文件,因此這件事需要你自已來做。需要注意的是在你解壓得到的目錄中有兩個文件:php.ini- development,和php.ini-production。為你的服務器選擇正確的(你需要的)配置文件,并將它復制到你指定的INI放置目錄中。
為了能從命令行中直接運行PHP(命令),你需要將PHP的bin目錄的位置添加到環(huán)境變量(path)中。我的bin目錄是/opt/php/bin。編輯~/.profile文件并添加下面這行:
- export PATH=$PATH:/opt/php/bin
這會將PHP的bin目錄添加到環(huán)境變量中。你可能還需要將 PHP的bin目錄添加到你的sudoers文件。 運行 visudo命令,以root身份編輯安全路徑(the secure path)將正確的目錄(PHP的bin目錄)添加進去。
為了能使用PHP5.5的opcode緩存,你需要在你的php.ini文件中添加zend_extension=opcache.so 。還要將opcache.enable=0這行,改為opcache.enable=1 (在php.ini的第1865行)。
英文原文:Compiling PHP 5.5 From Scratch
譯文鏈接:http://www.oschina.net/translate/compiling-php-5-5-from-scratch