CentOS 下多版本 PHP 的安装与配置

  1. 话题背景
    因项目需求,要使用新版本 Laravel 框架,当前 PHP 版本只能支持到 Laravel 5.1 ,使用 composer 拉取 Laravel 5.5 框架,配置好 nginx 后访问本地域名,效果如下
    Centos 下多版本 PHP 的安装与配置
    再次使用 composer 拉取 Laravel 5.8 框架,报错如下
    Centos 下多版本 PHP 的安装与配置
    当然,文档有提到 Laravel 5.5 版本 PHP >= 7.0.0Laravel 5.8 版本 PHP >= 7.1.3
    而当前环境 PHP 版本
    Centos 下多版本 PHP 的安装与配置
    于是考虑是不是该换个 PHP 版本了~

(困惑:为什么5.5版本也没跑起来呢?)

  1. 本地环境
  • 操作系统:macOS 10.12.6
  • 运行环境:docker Centos 7
  • Nginx:nginx/1.12.2
  • PHP:php 7.0.29/php 5.5.38
  • composer:1.9.0
  1. 安装准备

查看已经安装的 PHP 及其位置

[root]# locate */php

这一步可能出现的错误

-bash: locate: command not found

解决办法

[root]# yum install mlocate
[root]# updatedb

再次执行命令

[root]# locate */php

即可看到已安装版本及位置

  1. 开始安装
  • 下载源码

由于已经存在两个 PHP 版本,现在下载 7.3.8 版本,与之放在同一目录,方便管理:

[root ~]# cd /usr/local/
[root local]# wget http://am1.php.net/distributions/php-7.3.8.tar.bz2
[root local]# tar -jxvf php-7.3.8.tar.bz2
[root local]# cd php-7.3.8
  • 安装依赖库及模块
[root php-7.3.8]# yum -y install libxml2-devel curl-devel libpng libpng-devel libxslt libxslt-devel
[root php-7.3.8]# ./configure --prefix=/usr/local/php73 --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath -enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvshm --enable-sysvmsg --enable-sysvsem --enable-xml --enable-zip --with-fpm-user=nginx --enable-ftp --enable-exif  --enable-session --with-mhash --with-ldap
    ```

这一步可能出现的错误 

    configure: error: Cannot find ldap.h

解决办法

    [root php-7.3.8]# yum install openldap openldap-devel  -y

* 编译

[root php-7.3.8]# make
```

这一步可能出现的错误

/usr/local/src/php-7.3.8/ext/xmlrpc/libxmlrpc/encodings.c:73: undefined reference to `libiconv_open'
/usr/local/src/php-7.3.8/ext/xmlrpc/libxmlrpc/encodings.c:81: undefined reference to `libiconv'
/usr/local/src/php-7.3.8/ext/xmlrpc/libxmlrpc/encodings.c:101: undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] 错误 1

解决办法

在执行完 ./configure … 之后,修改 Makefile 文件中的 EXTRA_LIBS 行,在最后添加 -liconv ,保存退出

[root php-7.3.8]# vim Makefile
...
[root php-7.3.8]# wq

再次执行命令

[root php-7.3.8]# make

可能需要等待一段时间,执行成功后效果如下
CentOS 下多版本 PHP 的安装与配置

  • 安装
    [root php-7.3.8]# make install

成功后会在/usr/local目录下出现 php73 文件夹

  • 准备配置文件
    [root php-7.3.8]# cp php.ini-production /usr/local/php73/etc/php.ini
    [root php-7.3.8]# cd /usr/local/php73/etc/
    [root etc]# cp php-fpm.conf.default php-fpm.conf
    [root etc]# cd php-fpm.d
    [root php-fpm.d]# cp www.conf.default www.conf
    编辑 www.conf 文件,可修改其中的 usergroup 为 www ,如果安装了其他版本 PHP ,可能要修改 listen 端口号,防止冲突,这里改为 127.0.0.1:9001 ,保存退出
  • 启动 php-fpm
    [root php-fpm.d]# cd /usr/local/php73/sbin/
    [root sbin]# ./php-fpm

如果这一步没有报错,则安装成功

  1. 切换版本

查看当前 PHP 版本

[root ~]# php -v

效果如下
CentOS 下多版本 PHP 的安装与配置
切换到刚刚安装的版本

[root ~]# export PATH=/usr/local/php73/bin:$PATH

再次查看 PHP 版本

[root ~]# php -v

效果如下
CentOS 下多版本 PHP 的安装与配置

  1. 修改环境变量

将刚安装的 PHP 添加到环境变量

[root ~]# vim /etc/profile

export PATH=/usr/local/php7/bin:/usr/local/php/bin:$PATH 修改为 export PATH=/usr/local/php73/bin:/usr/local/php7/bin:/usr/local/php/bin:$PATH ,保存退出

执行命令

[root ~]# source /etc/profile

使环境变量修改生效

  1. 使用
  • 拉取框架

拉取 Laravel 5.5 及 Laravel 5.8 框架进行测试

[root ~]# cd /data/wwwroot
[root wwwroot]# composer create-project laravel/laravel laravel55 --prefer-dist "5.5.*"

执行成功后会在 wwwroot 目录下生成 laravel55 文件,进入该文件,执行命令查看版本

[root wwwroot]# cd laravel55/
[root laravel55]# php artisan --version

效果如下
CentOS 下多版本 PHP 的安装与配置

  • 配置虚拟主机

进入 nginx 配置目录,我的在 /etc/nginx/conf.d/ ,创建 laravel55.conf文件,内容大致为

server
{
     listen 80;
     server_name my.laravel55.cn;
     index index.html index.htm index.php default.html default.htm default.php;
     root /data/wwwroot/laravel55/public;
     location ~ [^/]\.php(/|$) {
         fastcgi_pass 127.0.0.1:9001;
         fastcgi_index index.php;
         include fastcgi.conf;
     }
     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
         expires 30d;
         access_log off;
     }
     location ~ .*\.(js|css)?$ {
         expires 7d;
         access_log off;
     }
     location ~ /\.ht {
         deny all;
     }
     location / {
         try_files $uri $uri/ /index.php?$query_string;
     }
 }

此处注意 ,fastcgi_pass 的配置要和刚刚安装的 PHP 的 php-fpmlisten 配置一致,并且确保对应版本的 php-fpm 已启动,否则访问项目可能会出现 502 Bad Gateway 错误。此处 PHP 版本较多,容易出现这个问题

  • 配置本地 hosts 文件

编辑本地 hosts 文件,加入本地域名映射 127.0.0.1 my.laravel55.cn ,保存退出

  • 重启 nginx 服务
    [root ~]# nginx -s reload
    打开浏览器,访问刚配置的域名,效果如下
    CentOS 下多版本 PHP 的安装与配置
    成功!

(Laravel 5.8 的配置访问同上)

  1. 参考博文
  1. 致谢

感谢上述博文作者铺的路,理解能力有限,本文如有错误或不足之处欢迎批评指正,多谢!

完~

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

很详细了,composer再配个镜像

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!