热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP的多版本环境管理

大多数语言编程的时候,都会碰到在不同版本下的代码兼容性问题,测试代码兼容性,或者调试老旧代码,需要不同的语言版本环境.????????ruby有了rbenv,rvm,nodejs也

????????大多数语言编程的时候,都会碰到在不同版本下的代码兼容性问题,测试代码兼容性,或者调试老旧代码,需要不同的语言版本环境.

????????ruby有了rbenv,rvm,nodejs也有nvm,当然php也应该有个类似的 phpenv , php-version , phpbrew 来管理PHP版本,简单查看了下这三个工具,我更偏向于phpbrew一些,其实我更愿意叫它PHPbrew.

如果你确定需要使用phpbrew,请认真读完本文,再去实践,请注意!前方有坑(其实我更推荐 vagrant ).

Brew & manage PHP versions in pure PHP at HOME

1.安装PHPbrew

下载:

curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrewchmod +x phpbrewsudo mv phpbrew /usr/bin/phpbrew

2.简单使用

为你的shell环境运行初始化脚本:

phpbrew init

设置环境变量:

sudo vi ~/.bashrc#文件最后,插入下面这行代码source ~/.phpbrew/bashrc#保存退出:wq

显示已知版本:

phpbrew known===> Fetching release list...[==================================================================] 29.67/29.67KB 100%5.6: 5.6.3, 5.6.2, 5.6.1, 5.6.0 ...5.5: 5.5.19, 5.5.18, 5.5.17, 5.5.16, 5.5.15, 5.5.14, 5.5.13, 5.5.12 ...5.4: 5.4.35, 5.4.34, 5.4.33, 5.4.32, 5.4.31, 5.4.30, 5.4.29, 5.4.28 ...5.3: 5.3.29, 5.3.28, 5.3.27, 5.3.26, 5.3.25, 5.3.24, 5.3.23, 5.3.22 ...You can run `phpbrew update` to get a newer release list.

显示旧版本:

phpbrew known --old

更新版本列表:

phpbrew known --update

3.编译安装PHP

默认配置安装PHP:

phpbrew install 5.4.0 +default

测试安装:

phpbrew install --test 5.4.0

显示debug信息:

phpbrew -d install --test 5.4.0

安装旧版本:

phpbrew install --old 5.2.13

清理编译目录:

phpbrew clean

4.PHP编译参数

显示可用参数:

phpbrew variantsVariants:   all, apxs2, bcmath, bz2, calendar, cgi, cli, ctype, curl, dba, debug, dom,   embed, exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, gmp, hash,   iconv, icu, imap, inifile, inline, intl, ipc, ipv6, json, kerberos, libgcc,   mbregex, mbstring, mcrypt, mhash, mysql, opcache, openssl, pcntl, pcre,   pdo, pgsql, phar, phpdbg, posix, readline, session, soap, sockets, sqlite,   static, tidy, tokenizer, wddx, xml, xml_all, xmlrpc, zip, zlib, ztsVirtual variants:   dbs: sqlite, mysql, pgsql, pdo  mb: mbstring, mbregex  neutral:   default: bcmath, bz2, calendar, cli, ctype, dom, fileinfo, filter, ipc,   json, mbregex, mbstring, mhash, mcrypt, pcntl, pcre, pdo, phar, posix,   readline, sockets, tokenizer, xml, curl, openssl, ziUsing variants to build PHP:  phpbrew install php-5.3.10 +default  phpbrew install php-5.3.10 +mysql +pdo  phpbrew install php-5.3.10 +mysql +pdo +apxs2  phpbrew install php-5.3.10 +mysql +pdo +apxs2=/usr/bin/apxs2

5.其他配置选项

phpbrew install 5.3.10 +mysql +sqlite -- \    --enable-ftp --apxs2=/opt/local/apache2/bin/apxs

6.使用和切换

临时使用:

phpbrew use 5.4.22

切换版本(设置默认版本):

phpbrew switch 5.4.18

关闭:

phpbrew off

7.显示已经安装过的PHP版本

phpbrew list

8.管理FPM

????????NGINX需要配合php-fpm使用,因此,如果是使用 LNMP 或者自己安装的NGINX+PHP的运行环境,则需要在phpbrew安装PHP的时候加上+fpm 模块,才能使用phpbrew的模块管理.

phpbrew install 5.6.3 +fpm

启动FPM:

phpbrew fpm start

停止FPM

phpbrew fpm stop

显示php-fpm的模块:

phpbrew fpm module

测试php-fpm的配置

phpbrew fpm test

配置php-fpm

phpbrew fpm config

更多 ????扩展安装 ???? 启用扩展  ????配置PHP ????管理FPM???? 其他组件(composer,phpunit).
????????

9. #实践笔记

OS X笔记:
安装准备:

brew install automake autoconf curl pcre re2c mhash libtool icu4c gettext jpeg libxml2 mcrypt gmp libevent libpng freetypebrew link icu4cln -s /usr/local/include/freetype2 /usr/local/include/freetype2/freetype

安装phpbrew:

curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrewchmod +x phpbrewsudo mv phpbrew /usr/bin/phpbrewphpbrew initsource ~/.phpbrew/bashrcphpbrew lookup-prefix homebrew

安装php版本:

#同样的在其他系统平台也会出现类似库找不到的问题,需要手动指定路径phpbrew install 5.3.29 +default +fpm +pdo +mysql +sqlite +gd --  --with-gd=shared --with-jpeg-dir=/usr/local/Cellar --with-png-dir=/usr/local/Cellar --enable-gd-native-ttf --with-freetype-dir=/usr/local/Cellar#print_r(gd_info());

注意:如果配置或编译的时候出现报错,请查看此页面 Requirement

安装PHP版本

测试默认config

phpbrew install 5.6.3 --test +defaulttail -f /home/rming/.phpbrew/build/php-5.6.3/build.log

默认:

phpbrew install 5.6.3 +default +fpm +pdo +mysql +sqlite +gdtail -f /home/rming/.phpbrew/build/php-5.6.3/build.log

精简:

phpbrew install 5.6.3 +fpm +json +dbs +mb +curl +mcrypt +filtertail -f /home/rming/.phpbrew/build/php-5.6.3/build.log
  • +json是因为phpbrew本身是个phar包,依赖于php的json函数

  • +fpm是为了nginx,phpbrew安装的php-fpm默认listen=127.0.0.1:9000,因此需要把之前lnmp的配置文件fastcgi_pass选项更改为 127.0.0.1:9000;

  • +dbs是因为没有安装mysqli扩展,想用个phpmyadmin都困难,囧;

  • +mb 是多种语言编码字节数问题,为了中文字符截断和匹配使用

  • +curl curl扩展 , 很常用的,你懂得

  • +mcryptphpmyadmin需要

  • +filter filter_var过滤函数

写个脚本切换php-fpm:

function nginxenv(){        phpbrew fpm stop &>/dev/null;        phpbrew switch ${1};        phpbrew fpm start &>/dev/null;}

????????保存文件到~/.phpbrew/nginxenv , 然后在~/.bashrc最后加上 source ~/.phpbrew/nginxenv , 然后命令行里就可以 使用nginxenv 5.3.29这样切换版本了.

参考:

  • PHPbrew Cookbook

  • manual

  • Requirement

PHP的多版本环境管理


推荐阅读
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 利用无代码平台实现高效业务应用开发
    随着市场环境的变化加速,全球企业都在探索更为敏捷的应用开发模式,以便快速响应新兴的商业机遇。然而,传统的软件开发方式不仅成本高昂,而且耗时较长,这往往导致IT与业务部门之间的合作障碍,进而影响项目的成功。本文将探讨如何通过无代码开发平台解决这些问题。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 本文介绍了如何在AngularJS应用中使用ng-repeat指令创建可单独点击选中的列表项,并详细描述了实现这一功能的具体步骤和代码示例。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
author-avatar
Jaaaaasonnv_116
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有