PHP是lnmp环境中必不可少的一个关键的东西了,我们不管是nginx,apache要执行php都需要安装php了,下面小编为各位介绍编译源码安装PHP的方法,希望文章可以帮助到各位.
我们使用vagrant建立虚拟环境,这里使用"chef/centos-6.5"这个box,这个box是一个比较纯净的CentOS-6.5系统,关于Vagrant如何使用,请参考Vagrant快速入门.
- $vagrantinitchef/centos-6.5
- $vagrantup
执行上述命令之后,就已经建立了一个centos-6.5的虚拟机并且启动了,这时我们使用命令ssh连接到虚拟机.
$ vagrant ssh
提示符变成了[vagrant@localhost ~]$,说明成功连接到了虚拟机,接下来,我们就可以开始PHP开发环境的安装配置了.
如果不使用vagrant,可以自己安装一个CentOS系统或者是虚拟机,以下步骤与vagrant没有直接关系.
编译源码安装PHP
首先,下载PHP安装文件,我们使用源码编译安装 PHP 5.4.35,到PHP官网下载PHP安装文件.
- $wgethttp://jp1.php.net/distributions/php-5.4.35.tar.gz
- $tar-zxvfphp-5.4.35.tar.gz
- $cdphp-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:Pleasereinstallthelibcurldistribution-
- easy.hshouldbein<curl-dir>/include/curl/
错误已经说明了,安装一下libcurl.
$ sudo yum install libcurl-devel
继续编译,我们还会遇到如下错误:
configure: error:jpeglib.h not found.
因为我们的编译参数中提供了对GD库的支持,因此需要安装以下几个库.
- $sudoyuminstalllibjpeglibjpeg-devel
- $sudoyuminstalllibpnglibpng-devel
- $sudoyuminstallfreetypefreetype-devel
安装了这么多lib,总该成功了吧,再次编译,悲剧的是,又报错了:
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
我们还需要安装libmcrypt,这个lib在yum中是没有的,因此需要下载下来,手动编译.
- $wgetftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
- $tar-zxvflibmcrypt-2.5.7.tar.gz
- $cdlibmcrypt-2.5.7
- $./configure
- $make
- $sudomakeinstall
好了,我们再编译一次,这次一定要成功了,再不成功就不玩了,幸运的是,这次configure成功,一鼓作气,编译安装:
- $make
- $sudomakeinstall
一切都顺利的话,我们已经成功编译并且安装了PHP,安装目录在/usr/local/php,最后,我们需要提供php的配置文件php.ini.
- $sudocpphp.ini-development/usr/local/php/etc/php.ini
- $sudomv/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
- PHP5.4.35(cli)(built:Nov25201408:23:11)
- Copyright(c)1997-2014ThePHPGroup
- ZendEnginev2.4.0,Copyright(c)1998-2014ZendTechnologies
为了操作方便,可以将php的bin目录添加到环境变量,编辑~/.bash_profile,在export PATH上面添加下面一行内容:
PATH=$PATH:/usr/local/php/bin
然后执行如下命令:
$ source ~/.bash_profile
这样,我们就可以直接使用命令,而不需要添加目录了.
小技巧:如何查看PHP使用的是哪个配置文件?
- $strace-eopenphp2>&1|grepphp.ini
- open("/usr/local/php/bin/php.ini",O_RDONLY)=-1ENOENT(Nosuchfileordirectory)
- 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库,最后在文档中看到下面这段内容:
- TheMySQLdatabaseextensionsmustbeconfiguredtousetheMySQLClientLibrary.InordertousetheMySQLNativeDriver,PHPneedstobebuiltspecifyingthattheMySQLdatabaseextensionsarecompiledwithMySQLNativeDriversupport.ThisisdonethroughconfigurationoptionspriortobuildingthePHPsourcecode.
这里说的是如果安装mysql扩展的话,只能使用MySQL Client Library,百度/谷歌有好多安装教程,如果希望使用mysqlnd库的话,只能在编译PHP的时候指定,因此,好像是只能重新编译PHP了,如果你有好的办法,可以交流交流.
安装eAccelerator扩展
- $wgethttps://github.com/eaccelerator/eaccelerator/archive/master.zip-Oeaccelerator.zip
- $sudoyuminstallunzip
- $unzipeaccelerator.zip
- $cdeaccelerator-master/
- $phpize
- $./configure--enable-shared
- $make
- $sudomakeinstall
在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
- PHP5.4.35(cli)(built:Nov25201410:40:18)
- Copyright(c)1997-2014ThePHPGroup
- ZendEnginev2.4.0,Copyright(c)1998-2014ZendTechnologies
- witheAcceleratorv1.0-dev,Copyright(c)2004-2012eAccelerator,byeAccelerator
安装Xdebug扩展:
- $wgethttp://github.com/xdebug/xdebug/archive/master.zip-Oxdebug.zip
- $unzipxdebug.zip
- $cdxdebug-master
- $/usr/local/php/bin/phpize
- $./configure--enable-xdebug
- $make
- $sudomakeinstall
接下来配置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.
- $wgethttp://pecl.php.net/get/zendopcache-7.0.3.tgz
- $tar-zxvfzendopcache-7.0.3.tgz
- $cdzendopcache-7.0.3
- $phpize
- $make
- $sudomakeinstall
接下来需要配置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