[Laravel] 錯誤解決:The Zip PHP extension is not installed. Please install it and try again.

Mac 升級新版 macOS 10.15 Catalina 後,內建 PHP 7.3.9 缺少 zip extension,導致無法建立 Laravel 專案的解決辦法
〈1〉想在 Mac 系統搭建 PHP 開發環境很簡單:macOS Catalina 預設安裝好了 Apache(2.4.41)及 PHP(7.3.9),你只要啟用它們,並編修設定檔就完成了! macOS Catalina 預裝了 Ruby (2.6.3)、PHP (7.3.9)、Perl (5.18.4)、Python (2.7.16) 等常用的腳本語言,以及 Apache (2.4.41) Web 服務器。需要注意的是,在新版本中,zsh 已取代 bash 成為新版操作系統中的默認 shell。在 macOS Catalina 10.15 搭建 PHP 開發環境

// 啟用Apache
sudo apachectl start

// 更改httpd.conf,啟用php,註解(#)拿掉
LoadModule php7_module libexec/apache2/libphp7.so

〈2〉但是,我接著建立一支 Laravel 新專案,卻出現訊息「The Zip PHP extension is not installed. Please install it and try again.」,錯誤是 php-zip extension 沒有安裝。 // 確認有無 zip 套件
php -m

〈3〉在 stack overflow 網站,你可以找到解決辦法:下載和安裝PHP 7.3
升級到更高階 PHP 版本,可以透過 brew 來安裝
brew指令 - Homebrew是一個用Ruby寫的軟體管理工具
延伸閱讀:[MAC] Homebrew:Mac 必裝的套件管理工具

brew update
brew install php@7.3
brew link php@7.3


如果你執行的不順利,那指令可以是
brew update
brew install php@7.3
brew link --overwrite --force php@7.3
brew doctor


● 必備執行檔/bin、/sbin所在位置是 /usr/local/opt/php@7.3/
● php.ini 在 /usr/local/etc/php/7.3/php.ini
● apache下php的擴充套件模組所在位置是 /usr/local/opt/php@7.3/lib/httpd/modules/

最後,我建議你更新環境變數$PATH,以確保 php 是使用你 brew 安裝的版本。 修改方法是使用 .zshrc 方法來達成,這個檔案會在使用者登入時執行。所以是針對使用者的,並不會影響其他帳號。
如何使用 vim:
按下 『i』→ 進入編輯模式,開始編輯文字 (畫面左下角狀態列中會出現 –INSERT- 的字樣)
按下 『ESC』→ 回到一般指令模式 (畫面左下角狀態列的 – INSERT – 不見了!!)
按入 『:』→ 進入指令列模式 (輸入『w』是存檔;輸入『q』是離開;輸入『wq』是存檔並離開)
1) 打開終端機
2) 輸入 sudo vim ~/.zshrc 叫出 vi 編輯器後 (vim 是進階版的vi)
3) 將路徑輸入在檔案裡
echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.zshrc
source ~/.zshrc

4) 這可以讓系統去執行 .zshrc 使路徑馬上生效,這樣就完成了。
5) 現在可以檢查一下路徑 echo $PATH

這將能獲得一個包含有 zip module 的 php 7.3。
// check for the version
php -v

// check for the modules
php -m

為什麼我用 phpinfo() 打印出來的php版本和我服務器上用 php -v 打印出來的版本不同?
php -v 是 Linux 系統的 php 版本,而 phpinfo 裡顯示的是 WEB Server 中配置的版本。說簡單點,你的系統中有兩個 php 版本。☞ 用 phpinfo() 打印出來的 php 版本和在服務器上用 php -v 打印出來的版本不同的原因
遺憾的是,這些我都做完了,輸入 php -v 仍然是內建的缺了 zip 套件的 php 7.3.9,而不是我使用 brew 安裝的 php 7.3.12。產生這個結果,我踫到的原因是:我大概是在安裝7.3的過程裡,不知道發生了什麼事?造成 /usr/local/opt/php@7.3/bin 資料夾不存在!

解決辦法是重裝就沒事了!
brew reinstall php@7.3

〈4〉後記:分享網友告訴我的一些觀念 1. php7 已經原本就有 zip 功能,就不用特別開 extension
2. 舊的 terminal 會有一個舊的環境變數,把舊的 terminal 關一關,重開新的來用
3. php 是程式語言,有些功能不屬於程式語言的範疇,比如說 curl。那些功能需要 library 來實作,可能會把實做好的東西直接 build 進 php 裏面,或是做成 exstension 讓你 dynamic loading。當你有需要別的 extension 時,先上 php 官方查一下他是不是內建,是的話 php.ini 找到對應的 extension 註解關掉就好;不是的話你需要多安裝需要的套件,再打開 php.ini 裡的 extension
4. 用 Docker 可以省去這些麻煩,Laradock 可以參考看看

Source

PHP 7.3.8 zip extension missing from install of macOS 10.15 Catalina
Brew install PHP 7.2 instead of 7.3
MacOS 10.15 catalina 更新後PHP的一些坑
Installing PHP Extensions On ☞ How to Install a PHP 7.2 on macOS 10.15 Catalina using Homebrew and PECL
Updating Apache, PHP, and MySQL for macOS Catalina
在MacOS中使用Homebrew將PHP從71升級到72但仍然看到PHP 71
Mac Homebrew php

沒有留言:

技術提供:Blogger.