大多数语言编程的时候,都会碰到在不同版本下的代码兼容性问题,测试代码兼容性,或者调试老旧代码,需要不同的语言版本环境. ruby有了rbenv,rvm,nodejs也有nvm,当然php也应该有个类似的 phpenv , php-version , phpbrew 来管理PHP版本,简单查看了下这三个工具,
大多数语言编程的时候,都会碰到在不同版本下的代码兼容性问题,测试代码兼容性,或者调试老旧代码,需要不同的语言版本环境.
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
下载:
<code>curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew chmod +x phpbrew sudo mv phpbrew /usr/bin/phpbrew </code>
2.简单使用
为你的shell环境运行初始化脚本:
<code>phpbrew init </code>
设置环境变量:
<code>sudo vi ~/.bashrc #文件最后,插入下面这行代码 source ~/.phpbrew/bashrc #保存退出 :wq </code>
显示已知版本:
<code>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. </code>
显示旧版本:
<code>phpbrew known --old </code>
更新版本列表:
<code>phpbrew known --update </code>
3.编译安装PHP
默认配置安装PHP:
<code>phpbrew install 5.4.0 +default </code>
测试安装:
<code>phpbrew install --test 5.4.0 </code>
显示debug信息:
<code>phpbrew -d install --test 5.4.0 </code>
安装旧版本:
<code>phpbrew install --old 5.2.13 </code>
清理编译目录:
<code>phpbrew clean </code>
4.PHP编译参数
显示可用参数:
<code>phpbrew variants Variants: 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, zts Virtual 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, zi Using 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 </code>
5.其他配置选项
<code>phpbrew install 5.3.10 +mysql +sqlite -- \ --enable-ftp --apxs2=/opt/local/apache2/bin/apxs </code>
6.使用和切换
临时使用:
<code>phpbrew use 5.4.22 </code>
切换版本(设置默认版本):
<code>phpbrew switch 5.4.18 </code>
关闭:
<code>phpbrew off </code>
7.显示已经安装过的PHP版本
<code>phpbrew list </code>
8.管理FPM
NGINX需要配合php-fpm使用,因此,如果是使用 LNMP
或者自己安装的NGINX
+PHP
的运行环境,则需要在phpbrew安装PHP的时候加上+fpm
模块,才能使用phpbrew
的模块管理.
<code>phpbrew install 5.6.3 +fpm </code>
启动FPM:
<code>phpbrew fpm start </code>
停止FPM
<code>phpbrew fpm stop </code>
显示php-fpm的模块:
<code>phpbrew fpm module </code>
测试php-fpm的配置
<code>phpbrew fpm test </code>
配置php-fpm
<code>phpbrew fpm config </code>
更多 扩展安装 启用扩展 配置PHP 管理FPM 其他组件(composer,phpunit).
#实践笔记
OS X笔记:
安装准备:
<code>brew install automake autoconf curl pcre re2c mhash libtool icu4c gettext jpeg libxml2 mcrypt gmp libevent libpng freetype brew link icu4c ln -s /usr/local/include/freetype2 /usr/local/include/freetype2/freetype </code>
安装phpbrew:
<code>curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew chmod +x phpbrew sudo mv phpbrew /usr/bin/phpbrew phpbrew init source ~/.phpbrew/bashrc phpbrew lookup-prefix homebrew </code>
安装php版本:
<code>#同样的在其他系统平台也会出现类似库找不到的问题,需要手动指定路径 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()); </code>
注意:如果配置或编译的时候出现报错,请查看此页面 Requirement
安装PHP版本
测试默认config
<code>phpbrew install 5.6.3 --test +default tail -f /home/rming/.phpbrew/build/php-5.6.3/build.log </code>
默认:
<code>phpbrew install 5.6.3 +default +fpm +pdo +mysql +sqlite +gd tail -f /home/rming/.phpbrew/build/php-5.6.3/build.log </code>
精简:
<code>phpbrew install 5.6.3 +fpm +json +dbs +mb +curl +mcrypt +filter tail -f /home/rming/.phpbrew/build/php-5.6.3/build.log </code>
-
+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扩展 , 很常用的,你懂得 -
+mcrypt
phpmyadmin需要 -
+filter
filter_var过滤函数
写个脚本切换php-fpm:
<code>function nginxenv(){ phpbrew fpm stop &>/dev/null; phpbrew switch ${1}; phpbrew fpm start &>/dev/null; } </code>
保存文件到~/.phpbrew/nginxenv
, 然后在~/.bashrc
最后加上 source ~/.phpbrew/nginxenv
, 然后命令行里就可以 使用nginxenv 5.3.29
这样切换版本了.
参考:
- PHPbrew Cookbook
- manual
- Requirement
原文地址:PHP的多版本环境管理, 感谢原作者分享。

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!