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.pswp.cn/news/397487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397487.shtml
英文地址,請注明出處:http://en.pswp.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…