0%

Linux下编译安装多版本php详细教程

本文章以php7.1.31和php7.3.9版本为例进行安装

php7.1.31安装

1.安装依赖包

1
yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

2.下载安装包

1
2
cd /usr/local
wget https://www.php.net/distributions/php-7.1.31.tar.gz

3.解压

1
2
tar -zxvf php-7.1.31.tar.gz
cd php-7.1.31

4.检查当前的环境是否满足要安装软件的依赖关系

在php-7.1.31里面执行 预编译

1
./configure --prefix=/usr/local/php71 --with-config-file-path=/usr/local/php71/etc --with-config-file-scan-dir=/usr/local/php71/etc --enable-mbstring --enable-ftp --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --without-pear --enable-sockets --with-freetype-dir=/usr --with-zlib --with-libxml-dir=/usr --with-xmlrpc --enable-zip --enable-fpm --enable-xml --enable-sockets --with-gd --with-zlib --with-iconv --enable-zip --with-freetype-dir=/usr/lib/ --enable-soap --enable-pcntl --enable-cli --with-curl --with-openssl

特别注意:

  • –prefix=/usr/local/php71是编译后的文件路径,如果需要安装多个php版本,最好是区分出来,如果不区分,后续安装其他版本的时候,会覆盖掉之前的版本,导致/usr/local/下面的php文件夹冲突。

  • –with-config-file-path=/usr/local/php71/etc预编译php配置文件php.ini位置,建议是放在该路径下,否则会出现加载不了php.ini的情况

  • –with-config-file-scan-dir=/usr/local/php71/etc 预编译扫描php的配置文件路径

5.编译安装

1
make && make install

注意编译完成后的错误提示,没有则编译完成。编译完成之后会在 /usr/local/下生成一个php71的文件夹,里面就是php7.1.31的执行文件夹。

6.在之前编译的源码包中,找到 php.ini-production,复制到/usr/local/php71下,并改名为php.ini:

1
2
3
cd /usr/local/php7.1.31

cp php.ini-production /usr/local/php71/etc/php.ini 这个路径要跟预编译时设定的配置文件路径一致

将下载文件夹中的php配置文件拷贝到执行文件夹下面

7.[可选项] 设置让PHP错误信息打印在页面上

1
vi /usr/local/php71/etc/php.ini

编辑php配置文件php.ini,搜索并设置dislay_errors=on。

8.复制启动脚本

1
2
3
4
5
cd /usr/local/php7.1.31

cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm71

chmod +x /etc/init.d/php-fpm71

将php7.1.31下的启动脚本拷贝到/etc/init.d下面,赋予可执行权限,注意区分版本

9.修改php-fpm配置文件

1
2
3
4
5
cd /usr/local/php71/etc

cp php-fpm.conf.default php-fpm.conf

vi php-fpm.conf

去掉pid=run/php-fpm.pid前面的分号

特别注意:
将pid=改成pid=/usr/local/php71/var/run/php-fpm.pid,不能直接去掉分号完事,后续在启动的时候会报错,同时搜索并修改error_log=/usr/local/php71/var/log/php-fpm.log,同样不改后面启动会报错
php

1
2
3
/usr/local/php71/etc/php-fpm.d

cp www.conf.default www.conf

php-fpm 基本命令

1
2
3
4
$ /etc/init.d/php-fpm start  #php-fpm启动命令
$ /etc/init.d/php-fpm stop #php-fpm停止命令
$ /etc/init.d/php-fpm restart #php-fpm重启命令
$ ps -ef | grep php 或者 ps -A | grep -i php #查看是否已经成功启动PHP

10.开机自启动

1
2
3
4
5
vi /etc/rc.local

将 /etc/init.d/php-fpm71 start 添加进去

chmod +x /etc/rc.d/rc.local // 赋予执行权限

11.设置别名

1
2
3
4
5
vim  ~/.bashrc

alias php71='/usr/local/php71/bin/php'

source ~/.bashrc

12.更改侦听端口(127.0.0.1:9000 为默认的)

1
2
3
cd /usr/local/php71/etc/php-fpm.d

vim www.conf

改成自己需要设置的端口即可
php

13.校验&&检查

1
2
3
ps -ef | grep php 或者 ps -A | grep -i php  #查看是否已经成功启动PHP

netstat -ntulp | grep [端口号] // 查看端口是否被占用

php7.3.9安装

1.下载安装包

1
2
cd /usr/local
wget https://www.php.net/distributions/php-7.3.9.tar.gz

2.解压

1
2
tar -zxvf php-7.3.9.tar.gz
cd php-7.3.9

3.检查当前的环境是否满足要安装软件的依赖关系

在php-7.3.9里面执行

1
./configure --prefix=/usr/local/php73 --with-config-file-path=/usr/local/php73/etc --with-config-file-scan-dir=/usr/local/php73/etc --enable-mbstring --enable-ftp --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --without-pear --enable-sockets --with-freetype-dir=/usr --with-zlib --with-libxml-dir=/usr --with-xmlrpc --enable-zip --enable-fpm --enable-xml --enable-sockets --with-gd --with-zlib --with-iconv --enable-zip --with-freetype-dir=/usr/lib/ --enable-soap --enable-pcntl --enable-cli --with-curl --with-openssl

特别注意:
上面需要改成–prefix=/usr/local/php73 –with-config-file-path=/usr/local/php73/etc这样在编译的时候才会执行编译到php73里面去,与之前的7.1.31独立开来

4.编译安装

1
make && make install

注意编译完成后的错误提示,没有则编译完成。编译完成之后会在 /usr/local/下生成一个php73的文件夹,里面就是php7.3.9的执行文件夹。
然后重复上面安装7.1.31的第6个步骤持续进行

特别注意:
多个版本的php编译后的文件夹一定要注意区分,多个版本需要改不同的端口

特别注意:
最后检查php每个版本对应的php加载的配置文件是否生效
php

如果你的结果与我上面一致,恭喜你!已经完全安装完成!

最后的目录结构为:
php

启动状态:
php

其它

查看php安装时的预编译

1
php71 -i | grep config