[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:1) 打開終端機
按下 『i』→ 進入編輯模式,開始編輯文字 (畫面左下角狀態列中會出現 –INSERT- 的字樣)
按下 『ESC』→ 回到一般指令模式 (畫面左下角狀態列的 – INSERT – 不見了!!)
按入 『:』→ 進入指令列模式 (輸入『w』是存檔;輸入『q』是離開;輸入『wq』是存檔並離開)
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 仍然是內建的缺了 zip 套件的 php 7.3.9,而不是我使用 brew 安裝的 php 7.3.12。產生這個結果,我踫到的原因是:我大概是在安裝7.3的過程裡,不知道發生了什麼事?造成 /usr/local/opt/php@7.3/bin 資料夾不存在!
php -v 是 Linux 系統的 php 版本,而 phpinfo 裡顯示的是 WEB Server 中配置的版本。說簡單點,你的系統中有兩個 php 版本。☞ 用 phpinfo() 打印出來的 php 版本和在服務器上用 php -v 打印出來的版本不同的原因
解決辦法是重裝就沒事了!
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
沒有留言: