Homebrew学习及mac下升级php7问题

最近在thinkphp官网看到tp5更新,据说搭载php7后性能提升一大截。。为了学习一下,准备更新一下php。

我使用的是mac,原本的php版本是mac自带的,版本是5.5的。然后开始升级。

查阅资料,基本都是推荐Homebrew来安装。那Homebrew是什么的东东?下面来学习一下Homebrew。

1、Homebrew是什么?

我们知道在Linux下安装软件不像Windows下面那样,傻瓜式一步一步点击。Linux或者类Unix系统,安装都是通过软件包依赖,比如Red hat有yum,Ubuntu有apt-get。而mac下使用的就是Homebrew,简称brew。是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,等同于apt-get、yum一样。。

比如Homebrew官网,它的介绍是“The missing package manager for macOS”,macOS的缺少软件包管理器。

2、安装Homebrew。

知道了Homebrew(以下简称brew)是什么后,我们就可以使用它了。如何安装,很简单,一行命令。安装需要ruby,而Mac系统上已经默认安装了ruby。
注意:安装前需要有这些东西

注意

Intel的cpu、10.10以上系统、Xcode、shell


安装命令:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3、Homebrew的使用。

用法


下面的Homebrew文档翻译来自beyond__devil的博客,作者那个太乱了,自己整理总结了一下,方便以后使用。

brew –version // brew的版本概要

brew command [–verbose|-v] [options] [formula] …
// brew的命令格式:brew 命令 [详情] [可选参数] [具体查看的软件名]

essential commands - 基本命令(重要命令)

使用 ‘–verbose | -v’ 选项,许多命令可以打印出额外的调试信息。注意:这个选项,必须放在命令后面(例如:brew install -v git)

install 软件名 // 安装软件

remove 软件名 // 卸载软件

update // 通过Git从github上获取最新版本的homebrew

list // 列出全部安装的软件

search text|/text/
// 执行一个软件名子串的搜索。支持2种:1.字符串;2.正则,以’//’包围。注意:search命令,倾向在线搜索一些受欢迎的软件(例如:github上评分较高的等),如果没有搜索到,才会列出本地搜索到的软件。(例如:brew search /wge*/)

commands - 命令列表

1.audit [–strict] [–online] [软件名] //审查[某个软件]

  • Homebrew审查软件的编码风格是否符合规范,应该在提交一个软件之前运行此命令来进行检查
  • 如果没有提供 ‘软件名’,则所有的软件都会被检查
  • 使用 ‘–strict’ 选项,会运行额外的检查(更严格)。创建新软件时应该使用
  • 使用 ‘–online’ 选项,会运行额外的慢检查(需要一个网络连接)。创建新软件时应该使用
  • 运行audit命令,出现错误时,会以一个 ‘非0’ 的状态退出!这是非常有用的,例如:实现预提交

2.cat 命令 //显示命令的来源(github的来源,或者其他来源)

3.cleanup [–prune=days] [–dry-run] [-s] [软件名]

  • 针对所有或指定的某个已安装的软件,从 ‘Cellar’文件夹中移除所有旧版本。另外,从homebrew下载缓存中,删除所有的旧版本的下载包
  • 指定 ‘–prune=days’ 选项,移除指定日期之前的所有缓存文件
  • 指定 ‘–dry-run | -n’ 选项,显示哪些文件将会被移除,但并不实际操作
  • 指定 ‘-s’ 选项,移除缓存,删除下载包,甚至是软件最新版本的下载包(有些还未安装,就会被删除)。注意:对于任何已安装软件的下载包,并不会被删除。如果你也想删除这些,使用命令:’rm -rf $(brew –cache)’

4.commands [–quiet [–include-aliases]]

  • 显示内置的&外部的命令列表
  • 指定 ‘–quiet’ 选项,仅仅列出命令的名称,没有头部(header)
  • 指定 ‘–quiet –include-aliases’ 选项,外部命令的别名也会被显示出来

5.config
//显示 homebrew&系统 调试的有用的配置信息。如果你提交一个错误报告,你可能会被要求提供这方面的信息

6.create URL [–autotools | –cmake] [–no-fetch] [–set-name name] [–set-version version]

  • 生成一个软件的可下载文件的URL,并在编辑器中打开。Homebrew将尝试自动获取软件名和版本,但是如果失败,则需要你提供你自己的模板
  • 指定 ‘–autotools’ 选项,创建一个 ‘Autotools-style’ 风格的基本模板, ‘–cmake’,创建一个 ‘CMake-style’ 风格的基本模板
  • 指定 ‘–no-fetch’ 选项,Homebrew将不会下载URL到缓存中,也因此不会对软件添加’SHA256’
  • ‘–set-name’ & ‘–set-version’ 选项,允许你明确的设置你创建的包的名字和版本

7.deps [–1] [-n] [–union] [–tree] [–all] [–installed] [–skip-build] [–skip-optional] 软件名(可多个软件名参数)

  • 显示软件的依赖包。当传递了 ‘多个软件名参数’,只会显示这些软件共有的依赖包(除非我们传递了 ‘–tree’ | ‘–all’ | ‘–installed’,这几个选项,会列出每个软件各自的依赖包)
  • 指定 ‘–1’ 选项,仅仅显示一级依赖包,而不会向下递归查找依赖
  • 指定 ‘-n’ 选项,显示拓扑顺序的依赖关系
  • 指定 ‘–union’ 选项,显示软件的联合的依赖关系,而不是交集
  • 指定 ‘–tree’ 选项,显示树形结构的依赖关系
  • 指定 ‘–all’ 选项,显示所有软件的依赖关系
  • 指定 ‘–installed’ 选项,显示所有已安装软件的依赖关系
  • deps命令,默认显示软件的依赖关系,指定 ‘–stip-build’ 选项,跳过 ‘构建类型的依赖关系(只显示可选的依赖??不懂)’ | 指定 ‘–skip-optional’ 选项,跳过 ‘可选的依赖关系’

8.desc 软件名 //显示软件名称&一行描述

9.desc [-s | -n | -d] pattern

  • 指定 ‘-s’ 选项,在 ‘name’&’description’ 搜索
  • 指定 ‘-n’ 选项,只在 ‘name’ 搜索
  • 指定 ‘-d’ 选项,只在 ‘description’ 搜索
  • pattern支持两种方式:1.文本;2.正则,使用 ‘//’ 包围
  • 软件的描述会被缓存,缓存会在第一次搜索时创建,使得第一次搜索相对较慢

10.diy [–name=name] [–version=version]

  • 自动确定 ‘非Homebrew’ 软件的安装前缀,使用该命令的输出,你可以将你自己的软件安装到 ‘Cellar’ 中,之后链接它到Homebrew的链接前缀(也就是可以用Homebrew这套机制吧)
  • ‘–name’&’–version’选项,允许明确设置你正在安装的包的名字和版本

11.doctor
//检测系统潜在的问题,如果发现问题,该命令会以一个 ‘非0’ 的状态退出

12.edit //打开所有的Homebrew,进行编辑

13.edit 软件名 //在编辑器中打开软件

14.fetch [–force] [-v] [–devel | –HEAD] [–deps] [–build-from-source | –force-bottle] 软件名

  • 下载给定软件名的源码包,对于tar压缩包,也会打印 ‘SHA-1’&’SHA-256’ 校验
  • 指定 ‘–HEAD’| ‘–devel’ 选项,获取 ‘最新版’ 而非 ‘稳定版’
  • 指定 ‘-v’ 选项,如果URL代表一个VCS,进行一个详细的VCS检出。当一个存在的VCS缓存被更新,这会很有用(VCS就是版本控制程序,获取更新提交的文件)
  • 指定 ‘–force’ 选项,移除之前缓存的版本,重新获取新的
  • 指定 ‘–deps’ 选项,’也’ 会下载所有列出软件的依赖(也,表示不仅下载软件,也下载软件的依赖)
  • 指定 ‘–build-from-source’ 选项,下载源码而不是安装包?
  • 指定 ‘–force-bottle’ 选项,如果OS X已经存在当前版本,仍旧下载。即使在安装过程中,还未使用。

15.home //在浏览器中打开 ‘Homebrew’ 的主页

16.home 软件名 //在浏览器中打开 ‘软件’ 的主页

17.info 软件名 //显示软件的相关信息

18.info –github 软件名
//打开软件在github上的历史页面,查看软件的本地历史,使用:brew log -p 软件名

19.info –json=version (–all | –installed | 软件名)

  • 打印软件的json表示,目前version只支持 ‘v1’
  • 指定 ‘–all’ 选项,获取所有软件的信息
  • 指定 ‘–installed’ 选项,获取已安装的所有软件的信息

20.install [–debug] [–env=std | super] [–ignore-dependencies] [–only-dependencies] [–cc=compiler] [–build-from-source | –force-bottle] [–devel | –HEAD] 软件名

  • 安装软件的详细参数,软件名可被指定为几种不同的方式,查看 ‘specifying formulae’
  • 指定 ‘–debug’ 选项,当brew失败时,在临时构建的目录中,打开一个访问IRB|shell的交互式的调试会话
  • 指定 ‘–env=std’ 选项,使用 ‘标准构建环境’ 代替 ‘super环境’
  • 指定 ‘–env=super’ 选项,使用 ‘super环境’,即使 软件本身指定了 ‘标准构建环境’
  • 指定 ‘—ignore-dependencies’ 选项,跳过软件的任何依赖的安装。如果这些依赖并不存在,软件将可能安装失败
  • 指定 ‘–only-dependencies’ 选项,只安装软件的依赖,而不安装软件自身
  • 指定 ‘–cc=compiler’ 选项,尝试使用 ‘compiler’ 编译。’compiler’ - 具体的编译器,例如:gcc-4.2等
  • 指定 ‘–build-from-source’ 选项,即使提供了软件的 ‘bottle’ 版,也从源代码编译安装
  • 指定 ‘–force-bottle’ 选项,即使已经给出了自定义的安装选项,如果软件的 ‘bottle版’ 存在,强制安装 ‘bottle版’
  • 指定 ‘–devel’ 选项,软件定义了 ‘devel版’,安装 ‘devel版’(开发版)
  • 指定 ‘–HEAD’ 选项,软件定义了 ‘HEAD版’,安装 ‘HEAD版’(最新版,又名:master, trunk, unstable)
  • 为了安装 ‘HEAD版’ 中更新版本(是这样么,看后面的命令,也仅仅是安装head版啊),使用 ‘brew rm 软件名 && brew install –HEAD 软件名’

21.install –interactive [–git] 软件名

  • 下载并修补软件,接着打开一个shell。这允许用户运行’./configure –help’,同时除此以外,还可以确定如何将一个软件包转换为一个 ‘Homebrew软件’
  • 指定 ‘–git’ 选项,Homebrew将创建一个Git仓库,对于创建软件的补丁很有帮助

22.irb [–examples]

  • 进入交互的 ‘Homebrew Ruby shell’
  • 指定 ‘–example’ 选项,将显示几个示例

23.leaves
//显示已安装的软件(并不依赖另外的已安装软件),可理解为 ‘独立的软件’。leaves并非离开,而是leaf(叶子)的复数形式,表示分支结构中最尖端的软件,所以不会依赖其他软件

24.ln(简写),link [–overwrite] [–dry-run] [–force] 软件名

  • 链接软件的所有安装文件到 ‘Homebrew prefix’,当你安装软件时,这个会自动完成,但是对于DIY安装是非常有用的
  • 指定 ‘–overwrite’ 选项,当链接时,Homebrew将删除 ‘Homebrew prefix’ 中已经存在的文件,会重新生成链接文件
  • 指定 ‘–dry-run | -n’ 选项,Homebrew将列出所有将要生成连接的文件,并不会真正执行。获取传递了 ‘–overwrite’ 选项,将会列出要删除的文件,但并不会真正删除
  • 指定 ‘–force’ 选项,Homebrew将允许keg-only软件被链接(默认情况下,keg-only不能被链接)

25.ls,list [–full-name]

  • 列出所有已安装的软件
  • 指定 ‘–full-name’ 选项,打印软件的全称

26.ls,list –unbrewed
//列出所有 ‘Homebrew prefix’ 中并未通过 Homebrew 进行安装的文件!!

27.ls,list [–version [–multiple]] [–pinned] [软件名]

  • 指定了 ‘软件名’,会列出软件已安装的文件
  • 指定 ‘–verbose’ 选项,会递归列出,每个软件的所有子模目录的内容
  • 指定 ‘–version’ 选项,显示所有已安装软件的版本号
  • 指定 ‘–version 软件名’,只显示该软件的版本号
  • 指定 ‘–version –multiple’ 选项,只显示多版本安装的软件
  • 指定 ‘–pinned’ 选项,列出 ‘pinned 软件’的版本

28.log [git-log-options] 软件名 … (可多个软件)

  • 显示指定软件的git log日志
  • 指定 ‘git-log-options’ 选项,应该是日志本身的选项

29.missing [软件名]
//检查指定软件的丢失的依赖!如果没有提供 ‘软件名’,检查所有通过brew安装的软件

30.migrate [–force] 软件名

  • 将重命名的包命名为新的名字,针对软件的包名字为旧名称
  • 指定 ‘–force’ 选项,将处理已安装的软件&指定的软件,就像它们来自相同的taps(补丁),并迁移它们

31.options [–compact] (–all | –installed | 软件名)

  • 显示指定的软件的安装参数
  • 指定 ‘–compact’ 选项,在一个已空格分隔的单行上,显示所有的选项
  • 指定 ‘–all’ 选项,显示所有软件的选项
  • 指定 ‘–installed’ 选项,显示所有已安装软件的选项

32.outdated [–quiet | –verbose | –json=v1]

  • 显示有一个可更新版本的软件列表
  • 默认情况下,版本信息将显示在交互的外壳中,并在其他情况下被抑制
  • 指定 ‘–quiet’ 选项,只显示软件列表的名称(优先于 –verbose 选项)
  • 指定 ‘–verbose’ 选项,展示详细的版本信息
  • 指定 ‘–json=version’ 选项,输出格式为json。有效的版本目前只能是 ‘v1’

33.pin 软件名
//’pin’(锁,订,把…别住,可理解为:不允许改动软件)指定的软件,当发布brew升级命令,阻止软件被更新

34.unpin 软件名
//’unpin’(与pin相反,解锁软件),发不brew升级命令,允许软件被更新

35.prune [–dry-run]

  • 从 ‘Homebrew prefix’ 中,移除无效的符号链接。通常不需要,但是当执行了DIY安装时,会非常有用
  • 指定 ‘–dry-run | -n’ 选项,只显示哪些链接会被移除,并不会执行真正的删除

36.reinstall 软件名 //先卸载,再安装软件

37.rm, remove, uninstall [–force] 软件名

  • 卸载软件
  • 指定 ‘–force’ 选项,如果软件安装了多个版本,移除所有的安装版本

38.search,-S
//展示所有本地通过brew安装的软件(包括:打补丁(tapped)的软件)。当没有传递参数,不会执行线上(online)搜索

39.search,-S text | /text/
//执行一个软件名子串的搜索。支持2种:1.字符串;2.正则,以’//’包围。注意:search命令,倾向在线搜索一些受欢迎的软件(例如:github上评分较高的等),如果没有搜索到,才会列出本地搜索到的软件

40.search (–debian | –fedora | –fink | –macports | –opensuse | –ubantu) text
//在指定的包管理器的列表中搜索

41.sh [–env=std]
//实例化一个Homebrew构建环境。使用我们的 ‘years-battle-hardened’ Homebrew构建逻辑帮助你 ./configure && make && make install 或者 甚至你的gem安装成功。如果你运行 Homebrew,在一个仅配置了Xcode的环境中,由于它添加了工具(例如:创建你的PATH),否则编译系统会找不到

42.switch name version
//链接指定名称的具体版本到 ‘Homebrew prefix’

43.tap
//显示所有已安装的taps列表

44.tap [–full] user/repo [URL]

  • 查找软件的远程仓库
  • 未指定URL,通过https从github上查找软件仓库。由于有如此多的taps存在于github上,这个命令是一个捷径:tap / => https://github.com//homebrew-
  • 如果指定了URL,将会从任意位置,使用各种传输协议,只要是git支持的方式,tap一个命令仓库。1个参数形式的tap最简单,但是有限制。2个参数的命令不会假定,因此taps可以从任意位置,任意协议克隆得到。而不是仅从github&https协议得到。
  • 默认情况,仓库被克隆作为一个浅层副本(–depth=1),指定 ‘–full’ 选项,将会使用一个完全克隆!

45.tap –repair
//迁移tapped软件,从基于符号链接结构,到基于目录结构

46.tap –list-official
//列出所有官方的taps

47.tap –list-pinned
//列出所有pinned(锁定)的taps

48.tap-info tap(补丁名)
//显示tap的相关信息

49.tap-info –json=version (–installed | taps)

  • 打印taps的json格式,当前版本仅仅能接受的值是 ‘v1’
  • 指定了 ‘–installed’ 选项,获取所有已安装的taps信息

50.tap-pin tap
//pin tap(锁定tap),使它的软件优先于用户提供的软件

51.tap-unpin tap
//unpin tap(解锁tap),使它的软件不在优先

52.test [–devel | –HEAD] [–debug] 软件名

  • 一部分软件提供了一个测试方法。’brew test 软件名’ 运行测试方法。没有标准的输出或返回码,但是它通常会提示用户,安装的软件存在错误。
  • 指定 ‘–devel | –HEAD’ 选项,用于测试软件的 ‘开发版’ 或 ‘HEAD版’
  • 指定 ‘–debug’ 选项,当测试失败,在临时构建的目录中,打开一个访问IRB|shell的交互式的调试会话

53.unlink [–dry-run] 软件名

  • 从 ‘Homebrew prefix’ 中删除软件的符号链接。这对于临时禁用一个软件很有帮助:’brew unlink 软件名 && commands && brew link 软件名’
  • 指定 ‘–dry-run | -n’ 选项,将会列出所有将要删除的文件,但是并不会真正执行删除

54.unpack [–git | –patch] [–destdir=path] 软件名

  • 解压软件的源代码到当前工作目录的子目录。
  • 指定 ‘–destdir=path’ 选项,子目录将被创建为给定的目录名
  • 指定 ‘–patch’ 选项,软件的patches(补丁)将会被应用到解压到源代码中
  • 指定 ‘–git’ 选项,git仓库将会被初始化到解压的源代码中。这对于创建软件的patches(补丁)很有用

55.untap tap //移除一个tap仓库

56.update [–rebase]

  • 通过git获取 ‘Homebrew’ 的最新版本,以及所有软件的最新版从github上
  • 指定 ‘–rebase’ 选项,’git pull –rebase’ 将被调用

57.upgrade [install-options] [–cleanup] [软件名]

  • 升级过时的,unpinned(未锁定)的brew安装的软件
  • 安装时的选项,在这里也有效(升级和安装时,都可使用软件安装时的参数)
  • 指定 ‘–cleanup’ 选项,将移除之前安装的软件所有版本
  • 指定 ‘软件名’,仅升级指定的软件(即使该软件被pin-锁定,也可以升级)

58.uses [–installed] [–recursive] [–skip-build] [–skip-optional] [–devel | –HEAD] 软件名

  • 指定的软件名是作为某个软件的依赖,列出所有依赖此软件的软件列表。当指定了多个软件名,显示依赖全部指定软件的软件列表
  • 指定 ‘–recursive’ 选项,解决多余一级的依赖
  • 指定 ‘–installed’ 选项,仅列出已经安装的软件
  • 指定 ‘–skip-build’ 选项,跳过将此软件作为 ‘build type’ 依赖的软件列表
  • 指定 ‘–skip-optional’ 选项,跳过将此软件作为 ‘optional type’ 依赖的软件列表
  • 默认,uses显示的是稳定版软件的使用,指定 ‘–devel | –HEAD’ 选项,显示 ‘开发版 | HEAD版’ 软件列表

59.–cache [软件名]

  • 显示 ‘Homebrew’ 的下载缓存,可查看 ‘HOMEBREW_CACHE’
  • 指定 ‘软件名’,显示用于缓存软件的文件或目录

60.–cellar [软件名]

  • 显示 ‘Homebrew’ 的 ‘Cellar’ 路径。默认: (brewprefix)/Cellar (brew –repository)/Cellar
  • 指定 ‘软件名’,显示软件将被安装到 ‘Cellar’ 中的位置,没有任何版本目录的排序,作为最终的路径

61.–env //显示 ‘Homebrew’ 构建环境的一个简介

62.–prefix [软件名]

//显示 ‘Homebrew’ 的安装路径,默认是:/usr/local

63.–repository
//显示 ‘Homebrew’ 的 ‘.git’ 目录路径。对于标准安装,’prefix’ 和 ‘repository’ 是相同的目录

64.–version
//打印brew的版本到标准错误输出并退出

更多的用法可以看官网文档

总结一下,brew的工作目录在/usr/local/下面,下载的软件放在Cellar(/usr/local/Cellar)文件下,默认安装在opt(/usr/local/opt/)目录下。

常用的命令:
brew intstall:安装软件
brew uninstall: 卸载软件
brew list:列出已安装的软件
brew update:更新brew
brew home:用浏览器打开brew的官方网站
brew info:显示软件信息
brew deps:显示包依赖
brew -v: 查看homebrew版本

4、安装php7。

通过先前的一些介绍,我们对brew有了一定认识和了解。接下来我们就来使用brew安装升级php。

首先来创建目录,如果你没有创建过该目录,就先创建。

sudo mkdir /usr/local/var
sudo chmod 777 /usr/local/var

修改成你自己的用户名和组,如果你没有创建过该目录

sudo mkdir /usr/local/sbin/
sudo chown -R <username>:<group> /usr/local/sbin/

(使用命令,whoami可以查看username,group一般为wheel。例如:sudo chown -R anumbrella:wheel /usr/local/sbin/)

如果你原来使用过brew安装php的话,先使用

brew unlink php56

php56即(php5.6版本),如果你使用的是mac自带的php,可以忽略该命令。

接下来安装php7.0

brew install php70 --with-apxs2  --with-apache --with-gmp --with-imap --with-tidy --with-debug

后面参数一定要带上,如果不带参数,直接使用brew install php70命令安装,最后安装成功后,没有libphp7.so。我们无法在Apache中引用php7。
(mac 最新系统Sierra的发布,Apache加载php的模块(libphpx.so)不再默认生成,在安装php7的时候,要添加–with-apache参数)

安装好过后开启PHP70进程

brew link php70

输入命令,查看是否成功

php -v

上面两条命令是原来使用过brew安装过php后,更新php后使用,会出现php7.0版本,即安装成功。如果第一次安装,或者使用的mac自带的php。。可能无法成功,可以忽略。

5、修改Apache配置文件

打开Apache配置文件

sudo vim /etc/apache2/httpd.conf

将模块php5的注释掉,添加php7的。
#LoadModule php5_module libexec/apache2/libphp5.so

LoadModule php7_module /usr/local/opt/php70/libexec/apache2/libphp7.so

注意:libphp7.so是默认安装在/usr/local/opt/php70/libexec/apache2/目录下的,按照你的实际情况,换成你自己的安装路径即可。

<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

更改配置文件为php7_module的。。

打开.bash_profile文件,添加php7环境变量:

export PATH=/usr/local/opt/php70/bin:$PATH;

然后:

source .bash_profile

现在可以使用 php -v命令了。
最后重启Apache即可,

sudo apachectl restart

猜你喜欢

转载自blog.csdn.net/anumbrella/article/details/56486664