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