我们使用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
或 [root@localhost php_nginx]# ./configure --prefix=/usr/local/lamp/php_nginx --with-config-file-path=/usr/local/lamp/php_nginx/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=hph-fpm --with-mysql=/usr/local/lamp/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-alib-dir --with-mcrypt --enable-soap --enable-gb-nativr-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --with-curl
执行上述命令之后,提示如下错误:
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
。
把启动脚本拷贝到/etc/init.i/目录下
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
最后,我们需要提供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