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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM