每个人都应当使用 PHPBrew 来管理 PHP 的版本环境

社区刚刚从 PHP 变成 Laravel 我突然又分享一个关于 PHP 的东西是不是不太好呢,管他呢 :smiley:

本人对于 PHP 可以说是不太熟的,除了大二的时候做大作业使用过原生的 PHP ,大三的时候看过原生 PHP 开发的视频教程,大四的时候为了实习面试急急忙忙的学习使用 CI 框架 做了一个小东西(然而面试却) ,毕业后维护一个 PHP SDK 之外,并无其他的 PHP 开发经历。

大四下学期开始接触 Ruby 或者说传说中的 Ruby on Rails,之后的实习也好工作也罢,都多多少少与其有些许关系。为什么要说 Ruby on Rails 呢,因为它改变了我对开发的认识,如何安装一个第三方包? gem install xxx 或者编辑 Gemfile 文件,然后运行 bundle install,各种第三方依赖都很好的管理着。至于 Ruby 本身的版本管理有 RVMrbenv ,这一切都很好的运行着,并且影响着其他类似的编程语言,比如 Python 的 pip 和 pyenv (我不确定 python-pip 和 rubygem 到底是谁影响谁,但 pyenv 确实是 fork 自 rbenv 的)。虽然我这里说了 Ruby 的那么多的好处,但可不要一冲动就去花钱报班学习啊, Ruby-China 正在疯狂讨论那个李笑来的全栈营的事,有兴趣可以去凑个热闹。

咳咳,跑题了

为什么要在这里扯其他的编程语言的东西?因为我觉得那是好东西啊,并且 PHP 里面也有!但是社区中却没有相关的讨论,甚至没有相关的字眼。
file

Composer

既然是 Laravel 社区 ,相信大家都在使用 composer 了,我曾经开玩笑说 PHP 不用 Composer 就是耍流氓 貌似惹得那个人不高兴了。话说回来,国内用 Think PHP 的人或者公司简直多如牛毛,而且基本都是 3.2 不原生支持 Composer 的,但是貌似可以通过配置来使用,但貌似没几个人这么用,都固执的直接下载安装,就算是下载安装,自己写个 autoload 去自动加载,却又不会写,非要官方提供,真是让人哭笑不得。使用 Composer 就是为了解决第三方包的依赖管理问题的啊,为什么都这么固执呢, 抓狂 抓狂

PHPBrew

有 rbenv 和 pyenv ,当然也存在 phpenv,他们有什么用呢,其实就是可以快速的在多个语言的版本之间来回切换,方便测试。当然,这样的事 Travis-ci 也可以做到,并且不需要做多余的事(其实还是有多余的事的需要项目根目录下有个 .travis.yml 文件,而且 travis-ci 严重依赖 Github),但怎么取舍就看个人了,不过我是两个都用的,就算我不需要使用多个 PHP 版本,使用 PHPBrew 安装 PHP 也挺方便的(PS:我使用 pyenv 和 rbenv 其实也就这个理由),因为系统所带的 PHP 的版本并不一定总是你所需要的那个,而 PHPBrew 却可以安装几乎所有的 PHP 版本。
file

PHPBrew VS phpenv

到底用谁呢?肯定是 PHPBrew 看标题不就知道了,而且名字里面还有大写(偷笑)。

其实我是想用 phpenv 的,毕竟我现在就用着 pyenv 和 rbenv 刚刚好一脉相承,但是,当我安装好 phpenv 的时候,这家伙却不能用,不能用啊。另外 phpbrew 比 phpenv 的 start 多了差不多 5 倍,高下立判。

怎么使用 PHPBrew

这个没有什么好说的,安装 PHPBrew 还是比较简单的,就是使用它来安装 PHP 的时候有好多的参数可选,一下子会懵圈,所以认真读他的 README 是十分必要的。

现存问题

也不是说 PHPBrew 就是完美的,我使用 PHPBrew 的时候也是有几个问题的,最简单的就是竟然不能安装 5.3 和 5.4 版本的 PHP ,不过我想应该是我的操作系统环境问题。

结语

我觉得每个人都应当使用 PHPBrew 来管理 PHP 的版本环境,一旦你使用了它,你就会被他所带来的便利性所感动,变得再也离不开这个工具(夸张的修辞哈)。欢迎大家一起来讨论 :smiley:

写的不好,欢迎吐嘈拍砖

本帖已被设为精华帖!
本帖由 Summer 于 7年前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 26
Summer

PHP 的分享也是非常欢迎

7年前 评论

@M1racle

file

这样来安装PHP <=5.4的版本

7年前 评论

还没有使用过,因为一直在用5.5.12开发~~~
听说7很牛掰

7年前 评论

@Summer 开个玩笑,也是项目本身测试需要,所以去探索了一下,然后自己实际使用了一下,所以稍微分享一下

7年前 评论

@Macken update 了一下还是装不上,还是得再探索一下

file

7年前 评论

@overtrue :smiley:

@泽 是啊,听说很吊,我本地就安装的是 7.0.10 来的,因为并不是开发业务,所以感受不到吊的程度。

7年前 评论

一直在用 挺方便的

7年前 评论

不错啊.. 前两天还在找类似于 Pyenv Rbenv的东西呢。不过都没有满意的

7年前 评论

@lifesign :+1:

@逗比欢乐多 恩,正如我上面说的 phpenv 貌似用不了, PHPBrew 你可以试一下。另外我看到也有人用 Vagrant 说是坑少一些,不过个人感觉 Vagrant 有点过于重型了,日常开发还是选 PHPBrew 好一些

7年前 评论

之前开发 Rails 的时候用过 RVM 来管理过 Ruby 版本,在不同环境开发时很有帮助,PHPBrew 的设计思想我觉得挺棒。

7年前 评论

@helperhaps
试用了下,竟然没跑起来 在Homestead里面 提示缺各种组件....
我选择Docker...

7年前 评论

@Aufree 恩那,刚开始搭建 Rails 的开发环境的时候就是用 RVM 的,最近都开始切换到 rbenv ,如果只是随便开发不长期从事的话,两个都 OK 的。

@逗比欢乐多 这个嘛应该是你没有仔细看 README 和 WIKI 的结果

file

我用的是 Debian 他的系统依赖和 Ubuntu 的还不太一样,官方也没有提供。当然了,Docker 也不失为一种好的选项,如果你不觉得它太重的话。

7年前 评论

系统洁癖患者选择使用docker,(手动滑稽。

感谢楼主分享:+1:

7年前 评论

@thankuu :smile: 其实如果 Docker 仓库中有各个 PHP 版本的镜像的话也挺好的,就是要装好几个 docker 镜像,版本切换的话,要 stop 这个 start 那个,并且代码也是隔离的吧,也挺麻烦的,当然如果能写成脚本也很好的(这是我对 Docker 的理解哈,如果不对请拍砖)。就是觉得这种虚拟化的实现思路太重,Vagrant 也一样,用来部署还好,用来开发的话有点捉襟见肘。

当然了如果全局只需要一个特定的 PHP 版本的话,完全没有必要考虑这些。所以说,到底选择哪个也是要看具体使用场景来决定。这么一想了,其实上面一段话思路是有点乱的。汗

7年前 评论
Destiny

:punch: 好文章! 感谢

7年前 评论

@luo975974740 希望能给大家带来帮助

7年前 评论

代码不是隔离的,可以链接宿主主机任意文件夹,装起来个人感觉其实很简单,而且其实目前来说版本需求其实也就是<5.5,5.5\5.6,7三种吧?我也不太懂大家需求,目前我是这样的。

至于环境切换就是不同端口映射啦,不用开开关关,懒得输入那么长的命令alias大法好。

你可以试试,可能没你想象中那么重。

重要的是我不太喜欢直接在机子上装那么多东西,除了PHP还写Py等等那得装多少东西,多可怕~,不用了就删分分钟:laughing:

不过不想折腾那么多的话,PHPBrew的确是个很好的办法~
再次感谢楼主分享,赞:+1:

7年前 评论

@thankuu 哈哈,可以,我用的 Debian ,电脑上装了各种开发环境,包括但不限于 Erlang、Lua、Perl、Node、PHP、Python、Ruby,只有后面四种有相应的版本管理,其他的都是系统安装的 :smile:

代码不是隔离的

估计是我没怎么用过 Docker 吧

Docker 出现的契机貌似就是简化开发、部署环境的搭建,让人全身心投入到具体业务开发中,而不用理会其它问题。阁下能找到一种适合自己的方式,真是可喜可贺,你可以把自己的使用经验分享给大家看看,大家一起进步哈 :+1:

7年前 评论

虽然 ThinkPHP槽点不少,但总是用有色眼镜去看多少就有些变味了,存在既有理。

Composer 不过就是加一句 Include即可,何来支不支持之说。

对于环境管理还是建议 Docker,毕竟现在的 WEB 开发不仅仅是一个 PHP的问题了。

7年前 评论

@springjk 首先感谢你的批评

我要澄清的是我对于技术本身并没有带着有色眼镜去看,但如果是我的话语让你产生这种想法,那是我的错。

关于 Think PHP 那段吐槽,可以看到主要是在说我(因为工作原因——相关技术社区)所遇到的其使用者普遍水平不太高(当然水平高一点的就不会有下面那段问题,然后我也就不会遇到了),在 Composer 大行其道的今天还坚持用下载安装这种方式管理第三方插件是我所不能理解的,而且既然坚持使用这种方式又不自己去搞定那些不提供 Composer 之外的安装方式,自动加载不了的情况下的使用方法,总是呆在自己的舒适区中,我吐槽的是这些人。

至于环境管理到底是用 PHPBrew 还是 Docker 我上面也说了我的观点,Docker 很好,PHPBrew 也不错,他们的处理问题的角度不同,但解决的问题相似,当然 Docker 还能解决更多的其它问题,到底用哪个根据具体使用场景来决定就行了,或者两个都试试看看哪个顺手就用哪个。:smile:

7年前 评论

直接源码安装的会被鄙视么=。=

7年前 评论

@daryl 一般来说绝大多数人都不会的。

但是,我会,有原因有情景哈。如果我的库本身并没有提供源码安装的方式的话,而你非要源码安装,那么你要自己解决加载以及 namespace 问题,如果你能够自己解决,我非但不鄙视,而且会竖起大拇指 :+1: 可以,很强,但如果你不会,那可就难说了。

ps: 一般的讲,稍稍打开 Google 百度一下,就会有答案的。所以讨厌的本体是伸手党哈。

7年前 评论

@helperhaps 额= =没有遇到过 :joy: 看来我修炼的还不够 :joy:

7年前 评论

@daryl 没有遇到过很好啊, 说明你是一个幸运的人,并不是修炼不够哈 :laughing:

7年前 评论

configure: error: libxml2 not found. Please check your libxml2 installation?

[root@VM_0_14_centos ~]# yum install libxml2
Loaded plugins: fastestmirror, langpacks
Repository epel is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * webtatic: uk.repo.webtatic.com
Package libxml2-2.9.1-6.el7_2.3.x86_64 already installed and latest version
Nothing to do
[root@VM_0_14_centos ~]# phpbrew install 7.2
*WARNING* You're runing phpbrew as root/sudo. Unless you're going to install
system-wide phpbrew or this might cause problems.
===> phpbrew will now build 7.2.12
You haven't set any variant. A default set of extensions will be installed for the minimum requirement:
[bcmath, bz2, calendar, cli, ctype, dom, fileinfo, filter, ipc, json, mbregex, mbstring, mhash, pcntl, pcre, pdo, phar, posix, readline, sockets, tokenizer, xml, curl, zip, openssl, opcache]
Please run 'phpbrew variants' for more information.

===> Loading and resolving variants...
Checking distribution checksum...
Checksum matched: b724c4c20347b6105be109d98cc395a610174e8aadb506c82e8cb645b65ef6b6
===> Distribution file was successfully extracted, skipping...
===> Checking patches...
Checking patch for replace apache php module name with custom version name
Found existing build.log, renaming it to /root/.phpbrew/build/php-7.2.12/build.log.1542377068
===> Configuring 7.2.12...

Use tail command to see what's going on:
   $ tail -F /root/.phpbrew/build/php-7.2.12/build.log

Error: Configure failed:
The last 5 lines in the log file:
checking whether to enable LIBXML support... yes

checking libxml2 install dir... no

checking for xml2-config path...

checking for pkg-config... /usr/bin/pkg-config

configure: error: libxml2 not found. Please check your libxml2 installation.

Please checkout the build log file for more details:
         tail /root/.phpbrew/build/php-7.2.12/build.log
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!