2017 macOS High Sierra 安裝 PHP Apache 筆記 最近因為需要開發 iOS App 所以逼得我自己需要把 Mac OS 更新到最新版本,但更新完後發現內建在 OSX 中的 PHP 版本居然變成了 7,變成 PHP 7 是不打緊,只是我需要的 PHP-imagick 套件一直安裝不起來,覺得氣餒,所以為了解決這問題下了一點點功課。 基本上在網路上找相關的…

2017 macOS High Sierra 安裝 PHP Apache 筆記

最近因為需要開發 iOS App 所以逼得我自己需要把 Mac OS 更新到最新版本,但更新完後發現內建在 OSX 中的 PHP 版本居然變成了 7,變成 PHP 7 是不打緊,只是我需要的 PHP-imagick 套件一直安裝不起來,覺得氣餒,所以為了解決這問題下了一點點功課。

基本上在網路上找相關的解法都是用 Homebrew 來解決這項問題,找了大半天終於讓我找到一篇完整的介紹,以下就用此篇來說明利用 Homebrew 來針對 PHP 版本控制的方法吧!

環境設定

更新 xcode command line,終端機下 xcode-select --install

安裝 Homebrew

  • 安裝 Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 顯示版本 brew --version
  • 檢查 Brew brew doctor
  • 執行設定 brew tap homebrew/php,Tap 的用意是之後就不用再打 homebrew/php,例如 brew install homebrew/php/php71 --with-apache,就可以直接 brew install php71 --with-apache
  • 更新 brew brew update

移除停止使用 mac 原生的 Apache

先暫停 Apache sudo apachectl stopsudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

安裝新的 Apache

  • 用 Brew 安裝 brew install httpd
  • 啟動 sudo brew services start httpd
  • 設定 ps -aef | grep httpd
  • 重開 sudo apachectl -k restart

新 Apache 指令

  • 開啟 sudo apachectl start
  • 關閉 sudo apachectl stop
  • 重開 sudo apachectl -k restart

新 Apache 相關設定

  • 編輯 /usr/local/etc/httpd/httpd.conf
  • 修改一下項目
    • Listen 80
    • DocumentRoot "/usr/local/var/www"
    • LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
    • ServerName localhost
  • 重開 Apache sudo apachectl -k restart

安裝各版本的 PHP

重新安裝記得 unlink 然後是下 reinstall 安裝 php,安裝會比較久別擔心。

  • 安裝 5.6 brew install php56 --with-httpd
  • 先移除 5.6 設定 brew unlink php56
  • 安裝 7.0 brew install php70 --with-httpd
  • 先移除 7.0 設定 brew unlink php70
  • 安裝 7.1 brew install php71 --with-httpd

可以順便安裝相關套件如 mcrypt、imagick、redis,各版本指令如下:

  • 5.6 版本 brew install php56-mcrypt php56-imagick php56-redis
  • 7.0 版本 brew install php70-mcrypt php70-imagick php70-redis
  • 7.1 版本 brew install php71-mcrypt php71-imagick php71-redis

各版本的 php.ini 分別在:

  • 5.6 版本 /usr/local/etc/php/5.6/php.ini
  • 7.0 版本 /usr/local/etc/php/7.0/php.ini
  • 7.1 版本 /usr/local/etc/php/7.1/php.ini

更改 CLI 的 php 版本,以下以更改 5.6 為例

  • 因最後一個 install 的是 7.1 所以記得移除 brew unlink php71
  • 改使用 5.6 brew link php56

※ 注意!這裡只有改到 cli 部分,Apache 還沒改掉所以 phpinfo 出來應該還是 7.1

更改 Apache 的 php 版本

以下以更改 5.6 為例

打開編輯 /usr/local/etc/httpd/httpd.conf 會發現多出如下:

LoadModule php5_module /usr/local/Cellar/php56/5.6.31_7/libexec/apache2/libphp5.so
LoadModule php7_module /usr/local/Cellar/php70/7.0.24_16/libexec/apache2/libphp7.so
LoadModule php7_module /usr/local/Cellar/php71/7.1.10_21/libexec/apache2/libphp7.so

將其改成

LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
LoadModule php7_module /usr/local/opt/php70/libexec/apache2/libphp7.so
LoadModule php7_module /usr/local/opt/php71/libexec/apache2/libphp7.so

但只能一個,因為要以 5.6 為例子,所以其他註解起來

LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
#LoadModule php7_module /usr/local/opt/php70/libexec/apache2/libphp7.so
#LoadModule php7_module /usr/local/opt/php71/libexec/apache2/libphp7.so

※ 注意!這裡改的是 Apache 部分,CLI 則不是這樣改的~

接著把

<IfModule dir_module>
 DirectoryIndex index.html
</IfModule>

改成

<IfModule dir_module>
 DirectoryIndex index.php index.html
</IfModule>
<FilesMatch \.php$>
 SetHandler application/x-httpd-php
</FilesMatch>

然後重該 Apache sudo apachectl -k restop

版本切換工具

因版本切換時,因為都要先 unlink 再 line 太麻煩,而且還有分 CLI 與 Apache 的更改兩步驟,所以可以使用 sphp 來快速解決這問題。

  • 安裝 curl -L https://gist.github.com/w00fz/142b6b19750ea6979137b963df959d11/raw > /usr/local/bin/sphp
  • 更改權限 chmod +x /usr/local/bin/sphp
  • 安裝好後 echo $PATH 看一下有無 sphp
  • 舉例,終端機直個打 sphp 就可以列出可用的 php 版本,而切換 70 版本則 sphp 70

筆記

  • 新的 Apache conf 位置 /usr/local/etc/httpd/httpd.conf
  • 新的 Apache vhosts 位置 /usr/local/etc/httpd/extra/httpd-vhosts.conf
  • Apache 開啟 sudo apachectl start
  • Apache 關閉 sudo apachectl stop
  • Apache 重開 sudo apachectl -k restart

相關參考

用 PHP 實作網路相簿 - OA Wu's Blog
用 PHP 實作網路相簿
用 PHP 實作網路相簿 因為大三專題有接觸網頁設計,所以就利用課餘時間開發了簡單的一套相簿系統,這套系統是使用 php 版本 5.4 開發,內容包含基本的登入、上傳、編輯..等 Create、Read、Update、Delete(CRUD) 功能。 大學時期還不知道任何的 Framework 於是自己製作了一套屬於自己的框架系統,並且嘗試實作出可以登入、…
用 PHP 實作雲端空間與部落格 - OA Wu's Blog
用 PHP 實作雲端空間與部落格
用 PHP 實作雲端空間與部落格 此作品是大四作品之一,因為製作了相簿系統完後有了更多對於網站開發的心得,於是就馬上開啟了新專案,逐步的開發這個平台,這個作品主要是加強了相簿系統,加入了 上傳檔案、部落格文章、隱私權限、好友管理... 等社群功能。 作品此次融入了更多的元素,其中包含當時的 Facebook 版型、無名…
2014 OACI - OA Wu's Blog
2014 OACI
2014 OACI 這是一個以 CodeIgniter 2.1.4 為基礎版本,將其新增進階功能的一套好用的 PHP Framework,加入了 PHP ActiveRecord 並且與 OrmUploader 讓圖片網址處理更方便,以及多樣的前後端整併。 這一套個人的 Framework 如入了多樣的資源參考,其中參考了 Ruby on Rails 的 RubyGems 相關工具,以及導入 OA's ElasticSea…
天氣地圖 Weather Maps - OA Wu's Blog
天氣地圖 Weather Maps
天氣地圖 Weather Maps 這項做主要是藉由中央氣象局的網站資料建置出來的,其中主要功能是可以藉由 Google Maps 查詢各地方的天氣預報概況,並且可以查看各個地區的每小時溫度變化,以及搭配使用 localStorage 來實作前端關注的功能。此作品主要利用 PHP 取得資料,並且編譯成 HTML 檔案上傳 Amazon S3,此架構不僅可以減…
吳政賢個人簡歷OA WuLiveCoding.tw
OA Wu's Blog
開發心得
2017 macOS High Sierra 安裝 PHP Apache 筆記