header image

Ubuntu Server 14.04 LTS上编译安装PHP7

由于是在服务器上安装,所以都是命令行,下面就列出命令不给出结果了,如果出现错误请自行查找原因。

本文是在Ubuntu Server 14.04 LTS上编译的,因为15.04之后Ubuntu换用了systemd来管理服务,所以本文的内容并不适用。

本文章编译的是FPMNginxApache2都可以使用,如果要编译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

然后这个libgmp的头文件还有可能有问题,我们需要自己解决一下:

sudo ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/

编译设置

然后就是编译设置了。下面给出了一个满足大多数需求的参数,直接全部复制到终端中粘贴。这些参数中的目录是模仿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_sizeupload_max_filesize两个参数和其他一些你需要的参数:

vim /etc/php7/fpm/php.ini

然后就是修改fpm的配置文件。

vim /etc/php7/fpm/php-fpm.conf

这个文件主要是修改三个地方:

  1. ;pid = run/php-fpm.pid,去掉前面的;,并改为pid = /var/run/php7-fpm.pid
  2. ;error_log = log/php-fpm.log,同样去掉;,并改为error_log = /var/log/php7-fpm.log
  3. 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

这个文件修改两个地方:

  1. listen = 127.0.0.1:9000,改为listen = /var/run/php7-fpm.sock
  2. ;listen.owner = www-data;listen.group = www-data前面的;去掉。

最后来到我们服务配置了,首先加上可执行的权限,然后编辑它:

chmod 755 /etc/init.d/php7-fpm
vim /etc/init.d/php7-fpm

这个文件也需要改三个地方:

  1. php_fpm_CONF=${prefix}/etc/php-fpm.conf,改成我们之前配置的路径php_fpm_CONF=/etc/php7/fpm/php-fpm.conf
  2. php_fpm_PID=${prefix}/var/run/php-fpm.pid,同样改成我们配置的路径php_fpm_PID=/var/run/php7-fpm.pid
  3. 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.iniphp-fpm.confpool.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的编译安装,以后有机会再说吧。

赞赏

微信赞赏支付宝赞赏

回复

your email will keep secret. (* required).

你可以使用这些HTML标签和属性:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> .

This site uses Akismet to reduce spam. Learn how your comment data is processed.