CentOS 下多版本 PHP 的安装与配置
- 话题背景
因项目需求,要使用新版本 Laravel 框架,当前 PHP 版本只能支持到 Laravel 5.1 ,使用 composer 拉取 Laravel 5.5 框架,配置好 nginx 后访问本地域名,效果如下
再次使用 composer 拉取 Laravel 5.8 框架,报错如下
当然,文档有提到 Laravel 5.5 版本 PHP >= 7.0.0 ,Laravel 5.8 版本 PHP >= 7.1.3
而当前环境 PHP 版本
于是考虑是不是该换个 PHP 版本了~
(困惑:为什么5.5版本也没跑起来呢?)
- 本地环境
- 操作系统: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
- 安装准备
查看已经安装的 PHP 及其位置
[root]# locate */php
这一步可能出现的错误
-bash: locate: command not found
解决办法
[root]# yum install mlocate
[root]# updatedb
再次执行命令
[root]# locate */php
即可看到已安装版本及位置
- 开始安装
- 下载源码
由于已经存在两个 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
可能需要等待一段时间,执行成功后效果如下
- 安装
[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
文件,可修改其中的user
和group
为 www ,如果安装了其他版本 PHP ,可能要修改listen
端口号,防止冲突,这里改为 127.0.0.1:9001 ,保存退出 - 启动 php-fpm
[root php-fpm.d]# cd /usr/local/php73/sbin/ [root sbin]# ./php-fpm
如果这一步没有报错,则安装成功
- 切换版本
查看当前 PHP 版本
[root ~]# php -v
效果如下
切换到刚刚安装的版本
[root ~]# export PATH=/usr/local/php73/bin:$PATH
再次查看 PHP 版本
[root ~]# php -v
效果如下
- 修改环境变量
将刚安装的 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
使环境变量修改生效
- 使用
- 拉取框架
拉取 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
效果如下
- 配置虚拟主机
进入 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-fpm
的 listen
配置一致,并且确保对应版本的 php-fpm
已启动,否则访问项目可能会出现 502 Bad Gateway
错误。此处 PHP 版本较多,容易出现这个问题
- 配置本地
hosts
文件
编辑本地 hosts
文件,加入本地域名映射 127.0.0.1 my.laravel55.cn
,保存退出
- 重启 nginx 服务
打开浏览器,访问刚配置的域名,效果如下[root ~]# nginx -s reload
成功!
(Laravel 5.8 的配置访问同上)
- 参考博文
- CentOS 7 安装php7(已有php5.4)
- centos7源码安装php7.2
- centos切换php版本
- Centos设置默认的PHP版本
- 报错:-bash: locate: command not found
- configure: error: Cannot find ldap.h
- PHP 5.3.10 编译安装时出现 undefined reference to `libiconv’ 错误的解决方法
- php-fpm 服务启动报错处理
- php-fpm 服务启动脚本的配置及使用方法
- 致谢
感谢上述博文作者铺的路,理解能力有限,本文如有错误或不足之处欢迎批评指正,多谢!
完~
本作品采用《CC 协议》,转载必须注明作者和本文链接
很详细了,composer再配个镜像