自從 2020 年 Apple silicon (M1) 問世後,原本採用 intel 的 maxOS 一定會面臨到被加速淘汰的問題,當遇到Apple不再支援更新後,很多東西可能要手動自行安裝了,如果你沒有使用 VM 或者 docker,只想直接安裝在本機上,也不見得是件輕鬆事了
現狀是 MacBook Pro (MBP) 2014 已經因為 intel 晶片的關係無法再更新了,所以版本卡在Big Sur,原生版本也卡在Apache 2.4.59 以及 PHP 7.3,其實我主要是為了將Php 升到 8 以上版本,不過基於安全Apache就一併升至最新版吧。
安裝Homebrew
Homebrew 為macOS 系統的套件管理工具,接下來的安裝都會透過它來操作,若你還沒安裝過可以打開終端機執行以下指令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
或者到其網站 https://brew.sh/ 首頁找到Install Homebrew所附的語法
如果你曾經安裝過,在往下進行前建議先利用下面指令更新一下
brew update
安裝PHP
當安裝好 Homebrew 後,我們可以利用 brew 指令進行安裝,安裝前我們先看看有哪些php 版本可以安裝
brew search php
==> Formulae
brew-php-switcher php@8.0 phpmd pup
php php@8.1 phpmyadmin pop
php-code-sniffer php@8.2 phpstan pcp
php-cs-fixer phpbrew phpunit
==> Casks
eclipse-php phpstorm phpwebstudy pop
確定有 php@8.2 版本後我們透過下面指令安裝
brew install php@8.2
這將會是一個很漫長的過程,而且還可能中途失敗,假設不幸中圖安裝某個元件失敗時,沒關係,你可以透過 brew install <該套件名稱>
,先進行安裝,沒意外大多可以安裝成功
原因有二:
電腦隨著使用需求,用不同方式安裝各種東西後,很容易讓整個程序相依性混亂,若沒有好好移除,會導致無法正常更新,我正是因為多年使用下來還歷經app位元轉換,有這些問題,所以我對整台電腦做了重置,不然光是要安裝 php 就遇到一堆套件出現問題無法正常安裝,逐一解決實在不切實際,甚至還未必能解。
如果你像我一樣都重置了還是發生,那可能是另一種原因—— homebrew 的緩存出了問題,因此上述的單獨安裝或是清除緩存可以解決
brew cleanup -s brew doctor
當你安裝好導致原本安裝php失敗的套件後你可以透過下面指令繼續安裝php
brew reinstall php@8.2
當你安裝完成後你可以利用指令確認 php 版本
php -v
然後你就會發現你的版本是 php 7.3 而不是 8.2,這是因為目前mac執行 php 的位置設置在原生安裝的 php 上(這是沒法移除的),因此我們必須要告訴作業系統我們要改變php路徑,那我們剛剛透過 homebrew 安裝的 php 會在哪裡呢?
假設你用的是 silicon 版本的macOS 那麼你的 homebrew 預設安裝路徑會位於 /opt/homebrew
如果你跟我一樣是 intel 版本的macOS 那麼你的 homebrew 預設安裝路徑會位於 /usr/local
你也可以透過
brew --prefix
找到 homebew 預設的安裝位置
因此你就能在 /opt/homebrew/opt/php@8.2 或者 /usr/local/opt/php@8.2 找到剛剛安裝的php
接下來透過下面指令我們將 php 位置告知作業系統
silicon版本
echo 'export PATH="/opt/homebrew/opt/php@8.2/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/php@8.2/sbin:$PATH"' >> ~/.zshrc
intel版本
echo 'export PATH="/usr/local/opt/php@8.2/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@8.2/sbin:$PATH"' >> ~/.zshrc
關掉終端機重新打開,或是重新加載 source ~/.zshrc
這次再下 php -v
就能看到 版本變成8.2了
安裝MySQL
這也是一個漫長的過程,安裝指令如下
brew install mysql
如果你有指定使用的版本可以利用 mysql@版號,若無指定則會選最新的,同樣你可以先用
brew search mysql
先看看有哪些可以選
安裝好以後可以嘗試登入
mysql -u root -p
安裝Apache
我們同樣透過 homebrew 來安裝 apache
brew install httpd
當安裝好後得先把原生的apache 關掉
sudo launchctl bootout system /System/Library/LaunchDaemons/org.apache.httpd.plist
啟用服務
在你安裝好後檢視服務狀態 brew services list
你會發現status 一欄都是顯示 none 表示未啟動,可是明明下 php -v
跟 httpd -v
都有反應啊!?這是因為你下的指令屬於 CLI 如果你這時候打開網頁是沒有服務的因此我們要將其啟動
brew services start php@8.2
brew services start httpd
啟動後再下一次 brew services list
就會看到 status 變成了 started
配置Apache使用PHP
開啟 /etc/apache2/httpd.conf
# 將 php 模組路徑加入
LoadModule php_module /usr/local/opt/php@8.2/lib/httpd/modules/libphp.so
# 指定 Apache 處理 .php 檔案的方式
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
網站根目錄
預設是在 /Library/WebServer/Documents 目錄底下,我們在此目錄下建立一個檔案 index.php 並寫入內容
<?php
phpinfo();
?>
重啟一下 Apache
sudo apachectl restart
確認結果
透過瀏覽器開啟網頁 http://localhost/index.php 應該會看到 php 8.2 的資訊內容,至此完成兩者整合。
安全性加強
Apache 與 Php 預設的設定,並不安全,因此需要進行一些優化才能避免網站暴露太多服務端的資訊,讓有心人有機會針對漏洞攻擊,相關內容之後會額外再說明。