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

咱們使用vagrant創建虛擬環境,這裏使用"chef/centos-6.5"這個box,這個box是一個比較純淨的CentOS-6.5系統。 關於Vagrant如何使用,請參考Vagrant快速入門php

$ vagrant init chef/centos-6.5
$ vagrant up

執行上述命令以後,就已經創建了一個centos-6.5的虛擬機而且啓動了,這時咱們使用命令ssh鏈接到虛擬機。html

$ vagrant ssh

提示符變成了[vagrant@localhost ~]$ ,說明成功鏈接到了虛擬機。接下來,咱們就能夠開始PHP開發環境的安裝配置了。mysql

若是不使用vagrant,能夠本身安裝一個CentOS系統或者是虛擬機,如下步驟與vagrant沒有直接關係。git

####編譯源碼安裝PHPgithub

首先,下載PHP安裝文件,咱們使用源碼編譯安裝 PHP 5.4.35,到PHP官網下載PHP安裝文件。sql

$ 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源碼進行編譯安裝,進入到源碼目錄以後,執行下列命令安裝:centos

注意,若是須要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

執行上述命令以後,提示以下錯誤:bash

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

這是由於沒有安裝gcc編譯器,咱們須要先安裝gcc。app

$ 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

#####安裝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
相關文章
相關標籤/搜索