linux多版本php安装+采坑指南

最近在调试php程序时遇到遇到个php版本带来的bug,如图所示

 

 switch语句中的continue要改成break,或者用continue2代替,每次调试都要改下别人的代码,又不敢提交,这个问题的原因是别人还在用7.1.x的版本,而我装的是7.3.8,据传后来7.3的版本中这个bug修复了,索性我就直接换成跟线上保持一致的版本

下面开始在linux上安装7.1.5版本

下载安装php

#下载
wget https://www.php.net/distributions/php-7.1.5.tar.gz
#解压
tar -zxvf php-7.1.5.tar.gz
cd php-7.1.5
#安装
./configure --prefix=/usr/local/php7.1 --with-config-file-path=/usr/local/php --enable-mbstring --with-openssl --enable-ftp --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-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
make && make install

由于之前安装过一个php版本,依赖都是安装好的,上面的步骤都还顺利

 

安装依赖库

php依赖插件可通过 https://pecl.php.net  下载

以redis为例

wget https://pecl.php.net/get/redis-5.2.0.tgz
tar -zxvf  redis-5.2.0.tgz
cd redis-5.2.0
/usr/local/php7.1/bin/phpize
./configure --with-php-config=/usr/local/php7.1/bin/php-config
make && make install

在php.ini 添加依赖

vim  /usr/local/php7.1/etc/php.ini

 一般添加在module下

;extension_dir="/usr/local/php7.1/lib/php/extensions/no-debug-non-zts-20160303"  #取决于你的依赖编译后的目录,这行也可注释掉
[redis]
extension="redis.so"

 

安装xdebug

  如果要断点调试php代码需安装xdebug

  下载地址 https://xdebug.org/download

  编译步骤同上

vim  /usr/local/php7.1/etc/php.ini

一般添加在文件最底部

[XDebug]
zend_extension="xdebug.so"
xdebug.remote_port= 8888  #xdebug 监听的端口
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_handler = dbgp
xdebug.remote_host= 10.90.xx.xx #服务ip 用于远程调式

 

配置php-fpm

#重命名php-fpm下的www.conf
cd /usr/local/php7.1/etc/php-fpm.d
cp www.conf.default www.conf

#重命名 php-fpm.conf
cd /usr/local/php7.1/etc
cp php-fpm.conf.default php-fpm.conf

配置更多的php-fpm 进程(提高并发)

  vim php-fpm.conf 在末尾加上

pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 100
pm.max_requests = 500

让不同的版本的php-fpm监听不同端口

  vim /usr/local/php7.1/etc/php-fpm.d/www.conf

  listen = 127.0.0.1:9001  #监听 9001端口

 

 

启动php-fpm

service php-fpm start   #(restart\stop)  启动、重启、停止,一般服务器上只有一个php版本使用可以这么玩

多个版本的话就不可以这么玩了

#杀死所有的fpm进程
killall php-fpm  
#启动指定版本的php-fpm
/usr/local/php7.1/sbin/php-fpm

#当然也可指定php配置文件和fpm配置文件
/usr/local/php7.1/sbin/php-fpm -c /usr/local/php7.1/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

 

遇到的坑

1、我开phpinfo 中明明可以看到 我安装的依赖 如redis ,但是 php -m中看不到,web请求可以调用 redis,php 执行脚本 找不到 Redis类

解:  使用 php --ini 查看配置文件目录

 

 如果 Loaded Configuration File: (none) 把 php.ini 文件复制一份到上面的默认目录下(/usr/local/php7.1)即可 

反之php -m 中有安装的模块,web请求找不到该模块,也是同样道理

 

 总之:启动的php-fpm 和本地的php 可能不是同一份 php.ini ,笔者用默认的命令,不指定php.ini  只在 /usr/local/php7.1中维护一份 php.ini文件

 

posted @ 2020-06-06 19:13  .追风逐月  阅读(1428)  评论(0编辑  收藏  举报