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文件