Ubuntu Server 14.04 LTS上编译安装PHP7
由于是在服务器上安装,所以都是命令行,下面就列出命令不给出结果了,如果出现错误请自行查找原因。
本文是在Ubuntu Server 14.04 LTS上编译的,因为15.04之后Ubuntu换用了systemd来管理服务,所以本文的内容并不适用。
本文章编译的是FPM,Nginx和Apache2都可以使用,如果要编译Apache2的模块,请不要参考本文。
由于PHP7废弃了很多功能,所以一些依赖这些功能的程序可能无法运行,尝鲜前请三思。比如很多国产软件都在依赖的mysql相关函数,如果自己开发php应用请用mysqli代替。不过WordPress是没有问题的,尽情使用吧。
下载
很简单,上http://www.php.net/downloads.php然后找到最新版下载就行了,这里我们下载的是php-7.0.2.tar.gz。由于是日本的VPS,所以用日本的镜像。参数-O表示用后面的文件名来保存,否则会保存为地址的最后一段mirror。
wget -O php-7.0.2.tar.gz http://docs.php.net/get/php-7.0.2.tar.gz/from/this/mirror
然后解压出来。
tar -xzf php-7.0.2.tar.gz
然后切换工作目录。
cd php-7.0.2
依赖
要编译我们就得解决依赖关系,不过首先,我们先把工具完善了。
sudo apt-get install autoconf automake make
然后就是各种依赖了,这部分很难一次搞定,只能一次一次地运行configure然后看给出的错误信息来查找所需要的包。但是我们偷个懒,先把编译PHP5需要的包装上:
sudo apt-get build-dep php5
然后几个漏网之鱼就好弄了。根据我的经历,还需要如下软件包:
sudo apt-get install libgmp-dev libgmp3-dev libmcrypt-dev
然后就是编译设置了。下面给出了一个满足大多数需求的参数,直接全部复制到终端中粘贴。这些参数中的目录是模仿Ubuntu自带的PHP5的目录来的,后面建立配置文件时也是参照Ubuntu自带的PHP5的,如果你理解其中的含义,也可以自行设置。
PHP7CONF="--prefix=/usr/share/php7
--with-config-file-path=/etc/php7/
--enable-xml
--enable-shmop
--enable-bcmath
--enable-mbstring
--enable-zip
--enable-pcntl
--enable-ftp
--enable-exif
--enable-dba
--enable-calendar
--enable-sysvmsg
--enable-sysvsem
--enable-sysvshm
--enable-wddx
--enable-gd-native-ttf
--enable-gd-jis-conv
--enable-inline-optimization
--enable-intl
--enable-mbregex
--enable-mysqlnd
--enable-gd-native-ttf
--enable-sockets
--enable-soap
--enable-session
--enable-opcache
--with-curl
--with-mcrypt
--with-iconv
--with-gmp
--with-pspell
--with-gd
--with-jpeg-dir=/usr
--with-png-dir=/usr
--with-zlib-dir=/usr
--with-xpm-dir=/usr
--with-freetype-dir
--with-openssl
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-gettext=/usr
--with-zlib=/usr
--with-bz2=/usr
--with-recode=/usr
--with-xmlrpc
--with-gettext
--with-config-file-path=/etc/php7/cli
--with-config-file-scan-dir=/etc/php7/cli/conf.d
--with-config-file-path=/etc/php7/fpm
--with-config-file-scan-dir=/etc/php7/fpm/conf.d
--enable-fpm
--with-fpm-user=www-data
--with-fpm-group=www-data"
然后运行configure就行了。
./configure $PHP7CONF
仔细看最终结果,如果没有错误的话就可以编译了。如果提示缺少依赖,请安装相应的dev包。如果有错误的话请自行上网查找解决方法,或者在本文后留言提问。
编译安装
编译也很简单,直接make就行了。
make
编译完成后会提示你make test,你可以试试,但十有八九是会出错的,你可以报告一下问题。这里我们就不说了,直接安装吧。
sudo make install
如果没有出错,接下来就是最麻烦也最重要的配置了。
复制配置文件
所有配置文件操作都要使用root权限,所以我们先切换为root(如果不进行这步操作,后面的命令都要加上sudo):
sudo su
刚才指定的配置文件位置是/etc/php7/fpm/所以我们首先要建立这个目录:
mkdir /etc/php7
mkdir /etc/php7/fpm
mkdir /etc/php7/fpm/pool.d
编译的时候配置都已经帮你建立好了,在安装目录和源码目录下都有,我们就不舍近求远了,就在源码目录下操作了。
cp sapi/fpm/php-fpm.conf /etc/php7/fpm/
cp sapi/fpm/www.conf /etc/php7/fpm/pool.d/
然后是启动服务的文件:
cp sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm
然后就是复制最重要的php.ini:
cp php.ini-production /etc/php7/fpm/php.ini
修改配置文件
配置文件到位了,接下来就是修改了,同样这些操作都需要root权限。下面修改文件都是使用vim,如果你使用其他编辑器,请自行修改命令。
修改php.ini就不说了,和PHP5的差不多,主要是post_max_size和upload_max_filesize两个参数和其他一些你需要的参数:
vim /etc/php7/fpm/php.ini
然后就是修改fpm的配置文件。
vim /etc/php7/fpm/php-fpm.conf
这个文件主要是修改三个地方:
;pid = run/php-fpm.pid,去掉前面的;,并改为pid = /var/run/php7-fpm.pid
;error_log = log/php-fpm.log,同样去掉;,并改为error_log = /var/log/php7-fpm.log
include=/usr/share/php4/etc/php-fpm.d/*.conf,改为include=/etc/php7/fpm/pool.d/*.conf
然后就是fpm的监听池配置:
vim /etc/php7/fpm/pool.d/www.conf
这个文件修改两个地方:
listen = 127.0.0.1:9000,改为listen = /var/run/php7-fpm.sock;
;listen.owner = www-data和;listen.group = www-data前面的;去掉。
最后来到我们服务配置了,首先加上可执行的权限,然后编辑它:
chmod 755 /etc/init.d/php7-fpm
vim /etc/init.d/php7-fpm
这个文件也需要改三个地方:
php_fpm_CONF=${prefix}/etc/php-fpm.conf,改成我们之前配置的路径php_fpm_CONF=/etc/php7/fpm/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid,同样改成我们配置的路径php_fpm_PID=/var/run/php7-fpm.pid
php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID",加上参数来指定配置文件的路径,成为php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID -c /etc/php7/fpm/"
启动服务
这时候我们已经可以用service命令来启动php7-fpm服务了,但是还不能自动启动,所以我们要执行如下命令来让它自动启动:
sudo update-rc.d php7-fpm defaults
最后一步
到此PHP7的编译安装就全部完成了,但是别急,还有Nginx还没配置呢。
也很简单,打开Nginx的站点配置之后,把php相关配置下的fastcgi_pass参数改成我们的监听池就行了,就是fastcgi_pass unix:/var/run/php7-fpm.sock;,配置过PHP5的话一定不会陌生。
如果使用的是Apache2,也是类似的,把监听池改成/var/run/php7-fpm.sock就行了。
还有
升级
要升级,只要重复下载、编译设置、编译安装这三步就行了。
优化
优化就是修改/etc/php7/fpm下的php.ini、php-fpm.conf和pool.d下的相关文件,这个请自行上网搜索相关文章。
卸载
首先执行sudo update-rc.d php7-fpm remove,然后删除/usr/share/php7、/etc/php7、/etc/init.d/php7-fpm这些文件和目录就行了。
替代PHP5
诶?上面没有替换PHP5吗?是的,如果你看仔细点,你会发现我们的目录都是带有7的,也就是说是和PHP5并存的。
如果你不想用PHP5了,只需要执行sudo apt-get autoremove php5,然后你想在命令行下执行php的相关命令的话,你还要用update-alternatives来把/usr/share/php7/bin下面的程序添加到系统中,或者简单点直接在/usr/bin目录下创建指向这些程序的符号链接。
如果你还要用PEAR的话,还需要自行建立一些配置文件才行,这个不在本文的讨论范围之内,请自行研究。
对于配合15.04以上的systemd使用的PHP7的编译安装,以后有机会再说吧。