解決在 MAMP PRO 中 composer 顯示缺少 PHP 擴充套件 zip 警告的方法

最近參與了朋友的開發專案,在專案中需要使用 Composer 來安裝相依套件。

但是在執行 composer install 後,系統出現以下的錯誤訊息:

Problem 1
  - phpoffice/phpspreadsheet is locked to version 1.17.1 and an update of this package was not requested.
  - phpoffice/phpspreadsheet 1.17.1 requires ext-zip * -> it is missing from your system. Install or enable PHP's zip extension.

顯然是我的 PHP 中缺乏了 zip 的擴充套件。

因為使用的本地開發環境是透過 MAMP PRO 建立,因此特別查了一下 MAMP Pro 的解決方法。根據官方的做法,你需要前往 MAMP 的編譯檔目錄中,前往特定的 PHP 版本,透過 pecl 來進行安裝。

cd /Applications/MAMP/bin/php/php{{PHP 版本}}/bin
./pecl install zip
# 將 extension=zip 寫入組態檔
cd /Applications/MAMP/conf/php{{PHP 版本}}/
echo "extension=zip" >> php.ini

最後兩行可以透過 MAMP Pro 的介面 [File] > [Open Template] > [PHP (php.ini)] > {{PHP 版本}} 取代。完成設定後重啟 MAMP 的伺服器。

重新指向 macOS 的 php 指令

經過上述步驟後,重新執行 composer install 仍然會顯示缺少擴充的訊息。因此透過 php -i | grep zip 來檢查,發現 PHP info 中並沒有剛才安裝套件的影子,於是進一步檢查:

which php

結果顯示的是

/usr/bin/php

因為 composer 會去使用預設的 php 指令,因此即使 MAMP 這邊安裝完套件,仍然無法套用。因此還需要透過修改 bash 組態 (.bash_profile.zshrc) 的方式,將 php 指令指向 MAMP PRO。

vim ~/.zshrc
# vim ~/.bash_profile

於適當的位置插入 export 指令:

# Using MAMP PRO's php
export PATH=/Applications/MAMP/bin/php/php{{PHP 版本}}/bin:$PATH

接著將組態套用到系統中。

source ~/.zshrc
# source ~/.bash_profile

此時再執行 which php 就會顯示 MAMP PRO 的路徑。再次執行 composer install 也可以正常安裝。

參考資料

預設圖片
Eric Chuang
正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124