mac php5.6.30与php7共存,认识Homebrew以及在Mac上同时安装PHP5及PHP7

Homebrew几乎是Mac上必备的软件,用于下载安装和管理其他软件。尤其对于程序员,讲真,本人到现在仍然不知道在Mac上如何不借助Homebrew来搭建php-apache-mysql开发环境。

认识Homebrew

Homebrew是一个开源项目,据说它的作者曾经去谷歌面试,因无法在白板上手撕反转二叉树被拒了,一段趣闻:-)。这个开源项目的gihub地址是:https://github.com/Homebrew/。今天是2020-03-15,当前的版本,它的组成部分有:brew,core,cask,services。其中brew、core、cask收容了各种各样的软件,services则主要用于管理后台服务的开启和关闭,类似于Centos的service命令。

安装和修改源

安装Homebrew的方法很简单,在homebrew主页里可以一眼看到。如下:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

安装好了之后,它通常存放在/usr/local/Homebrew,如果不是,那么可以通过命令echo $(brew --repo)查看。cd到这个目录下,会发现这其实是一个git本地仓库,所以,每当我们执行brew update的时候,它会通过git从github.com上拉取更新。所以,在国内大陆这个更新操作会很慢。所以,我们第一步就是要把源替换成国内的镜像,比较有名的是中科大和清华的。针对前面提到的四个组成部分,国内有镜像源的只有brew、core、cask。下面以清华的镜像为例。

# 查看当前源的办法

git -C "$(brew --repo)" remote -v

git -C "$(brew --repo homebrew/core)" remote -v

git -C "$(brew --repo homebrew/cask)" remote -v

# 更换成清华的源

git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git

git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git

git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git

# 如果想要复原默认的源,则相类似的做法,将url设成github上对应的链接即可

git -C "$(brew --repo homebrew/core)" remote set-url origin https://github.com/Homebrew/homebrew-core.git

git -C "$(brew --repo homebrew/core)" remote set-url origin https://github.com/Homebrew/homebrew-core.git

git -C "$(brew --repo homebrew/cask)" remote set-url origin https://github.com/Homebrew/homebrew-cask.git

改好后,执行brew update --verbose可以看到很快就能完成更新。

另外还有一个比较特殊的东西叫Homebrew-bottles,它是Home-brew的二进制预编译包,比如你想安装php,那么brew会从bottles里拉取php及其各种依赖包到本地安装。所以,要想使用brew安装其他软件时比较快速,我们还需要设置bottles的国内镜像源,如下:

# 如果你使用的是zsh,那么可以把 .bash_profile 改成 .zshrc

echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.bash_profile

source ~/.bash_profile

brew tap

除了基本库brew以外,Homebrew通过tap指令来管理其他库,包括core和cask。同时,我们还可以添加其他第三方的库。涉及到以下几个指令:

brew tap # 查看当前已有的tap库

brew tap --help # 查看帮助文档

brew tap user/repo # 添加user/repo库

brew untap user/repo # 删除user/repo库

其他常用指令

brew --help # 查看帮助文档

brew search [TEXT|/REGEX/] # 搜索软件

brew install FORMULA... # 安装软件

brew info [FORMULA...] # 获得软件的信息

brew uninstall FORMULA... # 卸载软件

brew doctor # 诊断当前环境有没有问题

brew services list # 查看当前服务的状态,比如查看httpd、redis、memcached之类,前提这些服务是由brew安装的

brew services run (formula|--all) # 启动服务,但不设定开机自启动

brew services start (formula|--all) # 启动服务,并且设定开机自启动

brew services stop (formula|--all) # 关闭服务,并且设定开机不自启动

brew services --help # 获得帮助文档

安装和管理其他软件

Homebrew安装软件,涉及到四个目录:/usr/local/Cellar/,/usr/local/opt/,/usr/local/etc/和/usr/local/bin/。

/usr/local/Cellar/:存放安装的软件包。

/usr/local/opt/:存放各个软件的软链。在../Cellar/里的软件包目录里,可能还有一层是该软件的版本号,你肯定不希望其他地方引用这个软件的时候要写死版本号吧,否则当这个软件升级版本号后,还不得去改所有关联的配置?这个地方一般情况下,homebrew会自动创建合适的软链,如果没有,那么你也可以自己动手创建,指令是:ln -s 。

/usr/local/etc/:存放各个软件的配置文件。

/usr/local/bin/:存放各个软件的可执行文件外链的地方。貌似homebrew并不会在这里自动创建外链,所以需要自己动手创建,指令同上。然后为了能在任意地方执行这里的文件,需要把这个路径写入环境变量:

# 如果你使用的是zsh,那么可以把 .bash_profile 改成 .zshrc

echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile

source ~/.bash_profile

对以上的目录明了后,其实可以做一些triky的事情,比如,某个软件的某个版本在很久以前安装了,但后来换电脑,发现这个版本已经被homebrew移除,没办法通过brew重新下载安装,那么我们就可以从旧电脑的这些目录里,把软件包和相关的依赖,都拷贝到新电脑,倒腾倒腾,就可以在新电脑上使用这个软件的旧版本啦。

在Mac上同时安装PHP5和PHP7

安装PHP7

通过brew search php发现官方库里收录的版本有php@7.2和php@7.3。

直接安装php7.2:brew install php@7.2。

安装PHP5

增加一个库exolnet/deprecated,此库是热心人士将Homebrew废弃的软件版本保存下来的。

brew tap exolnet/homebrew-deprecated

再来搜索brew search php,会发现多了5.6、7.0和7.1的版本。

安装:brew install php@5.6。

安装PHP扩展

以往安装PHP扩展,比如php-memcached,可以通过指令brew install php56-memcached来完成,但现在不行了。现在得用pecl来安装。

# php7.2的若干扩展

cd /usr/local/opt/php@7.2/bin/

./pecl install memcached

./pecl install redis

./pecl install ssh2-1.2

./pecl install xdebug

# php5.6的若干扩展

cd /usr/local/opt/php@5.6/bin/

PHP_ZLIB_DIR=/usr/local/opt/zlib ./pecl install memcached-2.2.0 # 需要指定zlib的路径,否则会报错

./pecl install redis-4.3.0

./pecl install ssh2-0.13

./pecl install xdebug-2.5.5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ 1141

题意&#xff1a;给出一个表达式的子序列&#xff0c;要你填充这个序列&#xff0c;保证最终形成的序列长度最短&#xff0c;也就是添加的括号最少 这个子序列要遵循括号匹配的原则。 分析&#xff1a;转移方程dp[i][j]min(dp[i][k],dp[k1][j]).i<k<j.dp[1][1]1; dp[i][j…

PHP array_count_values() 函数用于统计数组中所有值出现的次数。

定义和用法 array_count_values() 函数用于统计数组中所有值出现的次数。 本函数返回一个数组&#xff0c;其元素的键名是原数组的值&#xff0c;键值是该值在原数组中出现的次数。 语法 array_count_values(array) 参数 描述 array 必需。规定输入的数组。 例子 <?php …

SpringDay01

一&#xff1a;什么是Spring。 简单的理解就是一个可以装web层&#xff0c; service层&#xff0c; dao层&#xff0c;这三层对象的容器。 二&#xff1a;Spring搭建 1.导包&#xff1a;核心四个包和log4j两个包 2.注册对象&#xff1a;User类 3.书写配置注册对象到容器 a>导…

bom_clear.php,thinkphp清除BOM方法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼在utf-8编码文件中BOM在文件头部&#xff0c;占用三个字节&#xff0c;用来标示该文件属于utf-8编码&#xff0c;现在已经有很多软件识别bom头&#xff0c;但是还有些不能识别bom头&#xff0c;比如PHP就不能识别bom头&#xff0c;…

(算法)Trapping Rain Water I

题目&#xff1a; Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. 思路&#xff1a; 题目的意思是说&…

字符数组拷贝与strcpy函数

代码&#xff1a; char str1[10],str2[10];for (int i0;i<10;i){str1[i]a;}strcpy(str2,str1); 让找出错误的地方。 先来看下strcpy函数&#xff1a; 使用格式&#xff1a;char* strcmp&#xff08;char* buffer&#xff0c;char*str&#xff09;功 能: 把从str地址开始且含…

java中的NAN和INFINITY

2019独角兽企业重金招聘Python工程师标准>>> java浮点数运算中有两个特殊的情况&#xff1a;NAN、INFINITY。 1、INFINITY&#xff1a; 在浮点数运算时&#xff0c;有时我们会遇到除数为0的情况&#xff0c;那java是如何解决的呢&#xff1f; 我们知道&#xff0c;在…

php框架tp5工作流程,tp5框架流程

之前没怎么了解过&#xff0c;但用过TP3.2.网上查了下说是区别很大&#xff0c;特此记录下。流程&#xff1a;1.入口文件默认是 public目录下的index.php// 定义应用目录define(APP_PATH, __DIR__ . /../application/);// 加载框架引导文件require __DIR__ . /../thinkphp/star…

有移动规则2

import org.robochina.airobot.tank.*; import org.robochina.math.*; import java.awt.geom.*; import java.util.*;/*** 这个类对应一个机器人&#xff0c;根据需要实现相应的Action处理函数&#xff0c;* 就可以订制自己的机器人。*/ public class Text extends SimpleRobot…

Troubleshooting(三):网络

2019独角兽企业重金招聘Python工程师标准>>> 前言 在 Troubleshooting 过程中&#xff0c;检查完进程信息后&#xff0c;接下来就是排查网络情况的时候了&#xff0c;初略翻过《TCP/IP 详解卷一&#xff1a;协议》这本书&#xff0c;简直跟看《深入理解 Linux 内核》…

SqlServer 备份还原教程

看了众多教程&#xff0c;自己也写个增强记忆&#xff0c;错误地方麻烦指出。 ———————————————————————-备份——————————————————————– 1.打开数据库&#xff0c;成功连接 2.找到要备份的数据库&#xff0c;图中演示备份数据库te…

php通过实现excel导入,php实现excel导入数据

表单页面 if($_POST [import]"导入数据 "){$leadExcel$_POST[leadExcel];//echo $leadExcel;die;if($leadExcel "true"){//echo "OK";die();//获取上传的文件名$filename $_FILES[inputExcel][name];//上传到服务器上的临时文件名$tmp_name $…

深入理解计算机系统----读书笔记

第二部分 信息的表示和处理 信息存储&#xff1a; 二进制&#xff08;0101001&#xff09;&#xff0c; 八进制&#xff0c;十六进制&#xff08;0x32FD&#xff09; 字&#xff08;word size&#xff09;指明整数和指针数据的标称大小&#xff08;normal size&#xff09;&…

FiddlerScript-常用总结

没有用过Fiddler的人应该对FiddlerScript没啥感触&#xff0c;我是真心觉得FiddlerScript对测试有一定的帮助哈。在web前端开发过程中&#xff0c;Fiddler是最常用的一款调试工具&#xff0c;那对于测试来说&#xff0c;对测试来说也是一大利器。在大多数情况下&#xff0c;通过…

OpenStack-Zun 使用

Zun组件简介 Zun是Openstack中提供容器管理服务的组件&#xff0c;于2016年6月建立。Zun的目标是提供统一的Openstack API用于启动和管理容器&#xff0c;支持多种容器技术。Zun原来称为Higgins&#xff0c;后改名为Zun。 Zun计划支持多种容器技术&#xff0c;Docker&#xff0…

【优雅代码】深入浅出 妙用Javascript中apply、call、bind

这篇文章实在是很难下笔&#xff0c;因为网上相关文章不胜枚举。 巧合的是前些天看到阮老师的一篇文章的一句话&#xff1a; “对我来说&#xff0c;博客首先是一种知识管理工具&#xff0c;其次才是传播工具。我的技术文章&#xff0c;主要用来整理我还不懂的知识。我只写那些…

PHP笔记随笔

1.CSS控制页面文字不能复制&#xff1a; body{-webkit-user-select:none;} 2.【php过滤汉字和非汉字】 $sc"aaad....##--__i汉字过滤"; //iconv("UTF-8","GB2312",$sc);utf-8转码 echo $temperegi_replace("[^\x80-\xff]",""…

qt linux 添加库文件路径,Linux下Qt调用共享库文件.so

jvm--4垃圾收集6. 垃圾收集GC (1)当需要排查各种内存溢出,内存泄漏等问题,当GC成为系统达到更高性能的瓶颈时,我们就需要对这些自动化的GC进行监控和调节. (2)PC计数器.本地方法栈.虚拟机栈,随方法或者线 ...GET和POSTAjax与Comet 1. Ajax Asynchronous Javascriptxml :能够向服…

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一、总结 一句话总结&#xff1a;两者都是对表单进行序列化&#xff0c;serializeArray()返回的是json对象&#xff0c;serialize()返回的是json形式的字符串&#xff0c;使用起来都是一样的 1、$&#x…

HDU 2842 Chinese Rings(矩阵高速功率+递归)

职务地址&#xff1a;HDU 2842 这个游戏是一个九连环的游戏。 如果当前要卸下前n个环。由于要满足前n-2个都卸下&#xff0c;所以要先把前n-2个卸下。须要f(n-2)次。然后把第n个卸下须要1次&#xff0c;然后这时候要卸下第n-1个。然后此时前n-2个都已经被卸下了。这时候把前n-2…