從零搭建LNMP環境(一) - 編譯原始碼安裝PHP

管宜堯發表於2015-01-04

我們使用vagrant建立虛擬環境,這裡使用"chef/centos-6.5"這個box,這個box是一個比較純淨的CentOS-6.5系統。

$ vagrant init chef/centos-6.5
$ vagrant up

執行上述命令之後,就已經建立了一個centos-6.5的虛擬機器並且啟動了,這時我們使用命令ssh連線到虛擬機器。

$ vagrant ssh

提示符變成了[vagrant@localhost ~]$ ,說明成功連線到了虛擬機器。接下來,我們就可以開始PHP開發環境的安裝配置了。

如果不使用vagrant,可以自己安裝一個CentOS系統或者是虛擬機器,以下步驟與vagrant沒有直接關係。

編譯原始碼安裝PHP

首先,下載PHP安裝檔案,我們使用原始碼編譯安裝 PHP 5.4.35,到PHP官網下載PHP安裝檔案。

$ wget http://jp1.php.net/distributions/php-5.4.35.tar.gz
$ tar -zxvf php-5.4.35.tar.gz
$ cd php-5.4.35

接下來對PHP原始碼進行編譯安裝,進入到原始碼目錄之後,執行下列命令安裝:

注意,如果需要mysql的話,最好是在變異的時候就提供引數並且指定為使用mysqlnd庫,否則單獨編譯 擴充套件的形式安裝只能使用MySQL Client Library。

$ ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd

執行上述命令之後,提示如下錯誤:

configure: error: no acceptable C compiler found in $PATH

這是因為沒有安裝gcc編譯器,我們需要先安裝gcc。

$ sudo yum install gcc

安裝之後,重新編譯,這次出現了新的錯誤:

configure: error: xml2-config not found. Please check your libxml2 installation.

提示找不到libxml2,沒問題,安裝一下就行了。

$ sudo yum install libxml2-devel

繼續重新編譯,編譯安裝的過程就是不斷解決問題的過程,每次遇到問題,我們去解決問題,沒有什麼是能難道我們的!

configure: error: Cannot find OpenSSL\'s <evp.h>

因為我們啟用了--with-openssl,因此,我們需要安裝openssl-devel

$ sudo yum install openssl-devel

再次編譯,提示

configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/

錯誤已經說明了,安裝一下libcurl

$ sudo yum install libcurl-devel

繼續編譯,我們還會遇到如下錯誤

configure: error: jpeglib.h not found.

因為我們的編譯引數中提供了對GD庫的支援,因此需要安裝以下幾個庫。

$ sudo yum install libjpeg libjpeg-devel
$ sudo yum install libpng libpng-devel
$ sudo yum install freetype freetype-devel

安裝了這麼多lib,總該成功了吧,再次編譯,悲劇的是,又報錯了:

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

我們還需要安裝libmcrypt,這個lib在yum中是沒有的,因此需要下載下來,手動編譯。

$ wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
$ tar -zxvf libmcrypt-2.5.7.tar.gz
$ cd libmcrypt-2.5.7
$ ./configure
$ make
$ sudo make install

好了,我們再編譯一次,這次一定要成功了,再不成功就不玩了。。。幸運的是,這次configure成功, 一鼓作氣,編譯安裝:

$ make
$ sudo make install

一切都順利的話,我們已經成功編譯並且安裝了PHP,安裝目錄在/usr/local/php

最後,我們需要提供php的配置檔案php.ini

$ sudo cp php.ini-development  /usr/local/php/etc/php.ini
$ sudo mv /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

PHP的安裝目錄由configure--prefix=目錄引數指定。另外,這裡我們搭建的是用於開發的環境, 如果需要作為生產環境,則需要注意一些安全性問題,同時,建議不要拷貝php.ini-development檔案了, 而是拷貝php.ini-production檔案。

檢視一下PHP的版本:

$ /usr/local/php/bin/php --version
PHP 5.4.35 (cli) (built: Nov 25 2014 08:23:11)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

為了操作方便,可以將php的bin目錄新增到環境變數。編輯~/.bash_profile, 在export PATH上面新增下面一行內容:

PATH=$PATH:/usr/local/php/bin

然後執行如下命令

$ source ~/.bash_profile

這樣,我們就可以直接使用命令,而不需要新增目錄了。

小技巧:如何檢視PHP使用的是哪個配置檔案?

$ strace -e open php 2>&1 |grep php.ini
open("/usr/local/php/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/local/php/etc/php.ini", O_RDONLY) = 3

如果沒有安裝strace命令,使用yum install strace 安裝即可。

安裝擴充套件

安裝完成基本的PHP了,接下來我們需要安裝一些符合業務需要的擴充套件。

安裝yaf開發框架擴充套件

執行以下命令,使用pecl進行安裝:

$ sudo /usr/local/php/bin/pecl install yaf

不出意外的話,上述命令足以完成yaf的安裝,接下來,需要在php.ini檔案中啟用yaf擴充套件。 編輯/usr/local/php/etc/php.ini,加入以下內容

extension=yaf.so

在執行上述命令的時候,可能會出現下列錯誤:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

ERROR: `phpize` failed

這是因為沒有安裝autoconf導致的,安裝以後就可以了

$ sudo yum install m4
$ sudo yum install autoconf
安裝mysql和mysqli擴充套件

安裝mysql相關擴充套件,推薦使用mysqlnd庫,但是找了半天,實在是沒有找到好的辦法單獨編譯mysql擴充套件使用 mysqlnd庫,最後在文件中看到下面這段內容:

The MySQL database extensions must be configured to use the MySQL Client Library. In order to use the MySQL Native Driver, PHP needs to be built specifying that the MySQL database extensions are compiled with MySQL Native Driver support. This is done through configuration options prior to building the PHP source code.

這裡說的是如果安裝mysql擴充套件的話,只能使用MySQL Client Library(百度/谷歌有好多安裝教程)。如果希望使用mysqlnd庫的話, 只能在編譯PHP的時候指定。因此,好像是隻能重新編譯PHP了。如果你有好的辦法,可以交流交流。

安裝eAccelerator擴充套件
$ wget https://github.com/eaccelerator/eaccelerator/archive/master.zip -O eaccelerator.zip
$ sudo yum install unzip
$ unzip eaccelerator.zip
$ cd eaccelerator-master/
$ phpize
$ ./configure --enable-shared
$ make
$ sudo make install

在php.ini中增加eAccelerator的配置資訊:

zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"

執行php -v可以看到

$ php -v
PHP 5.4.35 (cli) (built: Nov 25 2014 10:40:18)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with eAccelerator v1.0-dev, Copyright (c) 2004-2012 eAccelerator, by eAccelerator
安裝Xdebug擴充套件
$ wget http://github.com/xdebug/xdebug/archive/master.zip -O xdebug.zip
$ unzip xdebug.zip
$ cd xdebug-master
$ /usr/local/php/bin/phpize
$ ./configure --enable-xdebug
$ make
$ sudo make install

接下來配置php.ini,加入該擴充套件

zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_connect_back=1
;xdebug.remote_autostart=1
安裝OpCache擴充套件

因為eAccelerator已經沒人維護好長時間了,所以,可以考慮使用OpCache。

$ wget http://pecl.php.net/get/zendopcache-7.0.3.tgz
$ tar -zxvf zendopcache-7.0.3.tgz
$ cd zendopcache-7.0.3
$ phpize
$ make
$ sudo make install

接下來需要配置php.ini,啟用該擴充套件。

注意:如果與XDebug一起使用的話,需要確保OpCache在Xdebug之前載入。

zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/opcache.so"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

檢視是否安裝成功

$ php -v
PHP 5.4.35 (cli) (built: Nov 25 2014 10:40:18)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.3.0dev, Copyright (c) 2002-2014, by Derick Rethans
安裝Xhprof擴充套件
$ wget http://pecl.php.net/get/xhprof-0.9.4.tgz
$ tar -zxvf xhprof-0.9.4.tgz 
$ cd xhprof-0.9.4
$ cd extension/
$ phpize
$ ./configure
$ make
$ sudo make install

修改php.ini

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp/xhprof

使用圖形展示遇到的錯誤:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

解決辦法:

$ sudo yum install graphviz

相關文章