前面和網上説的都差不多(和 Linux 編譯安裝類似),去 Oracle 下載如下的安裝包(可以選擇版本,我這裏選擇的是 12.2)
- instantclient-basic-macos.x64-12.2.0.1.0-2.zip
- instantclient-sdk-macos.x64-12.2.0.1.0-2.zip
- instantclient-sqlplus-macos.x64-12.2.0.1.0-2.zip
由於 macOS 開啓了 SIP 基本上所有的操作都需要在 /usr/local/ 目錄下進行
解壓:
sudo unzip instantclient-basic-macos.x64-12.2.0.1.0-2.zip -d /usr/local/
sudo unzip instantclient-sdk-macos.x64-12.2.0.1.0-2.zip -d /usr/local/
sudo unzip instantclient-sqlplus-macos.x64-12.2.0.1.0-2.zip -d /usr/local/
# 設置環境變量
vim ~/.bash_profile
export LD_LIBRARY_PATH="/usr/local/instantclient_12_2"
默認都會解壓到 /usr/local/instantclient_12_2 目錄下
網上的資料都是表示這個時候直接使用 pecl install oci8,而實際上 macOS 默認並沒有安裝這個命令;這個時候也沒有安裝 Homebrew
所以我先安裝 Pear,先是參考這篇文章
- http://www.mayanlong.com/archives/2018/pear.html
- 發現有些地方因為 SIP 開啓的原因無法通過,進而查看了官方文檔
- https://pear.php.net/manual/en/installation.getting.php 參考了 Mac OSX 那節的內容
curl -O https://pear.php.net/go-pear.phar
php -d detect_unicode=0 go-pear.phar
以下摘錄於官方文檔
You're now ready to configure PEAR for installation.
First you need to change the Installation Base.
- So type 1, and then press Enter.
- Enter /usr/local/pear
- Press Enter.
Then, you will need to change the Binaries directory.
- Type 4, and then press Enter.
- Enter /usr/local/bin
- Press Enter.
到這裏基本上可以使用 pecl 了,執行如下命令
sudo pecl install oci8
運行安裝表示還是會報錯缺失 PHP_AUTOCONF 未配置; 查詢之後得知需要安裝 autoconf 並且不建議直接安裝(説是太多依賴,我沒有驗證),應該使用 Homebrew
安裝 Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
由於眾所周知的原因, 慢如蝸牛; 於是查詢解決方案, 參考如下
- macOS系統下安裝Homebrew
- 實際上有些地方是不一致的,比如文中提到的沒有的變量再接下來的 homebrew-core 的 clone 中無法生效,導致這個倉庫會非常慢,暫時也沒有得到什麼解決方案
- 按照完成之後再將幾個地址換成國內的鏡像,如文中所述
- 之後直接運行命令
brew install autoconf
默認在命令行中 brew 是沒有提示的,那麼可以參考官方文檔 https://docs.brew.sh/Shell-Completion 進行設置,開啓提示
然後再次運行,應該就可以安裝了
sudo pecl install oci8
然後重啓 Apache sudo apachectl restart,通過訪問有 phpinfo(); 的頁面去確認。
這個時候一般 OCI8 是安裝好了,可是項目需要的是 PDO_OCI,使用老的辦法炮製 sudo pecl install pdo_oci 發現安裝不了,説沒有這個庫,或者是要求 PHP 版本小於 6
這個時候只能通過編譯源碼中的擴展來實現(這些步驟和在 Ubuntu 下編譯就是一模一樣的了)
- 查看 PHP 版本
php -v得到版本7.1.23那麼去 PHP 官網下載對應版本的源碼 https://www.php.net/releases/ - 解壓到方便操作的地方,比如我放在桌面
- 進入目錄後進入
ext/pdo_oci/ - 將命令行切換到這個目錄,然後運行
phpize
./configure --with-pdo-oci=instantclient,/usr/local/instantclient_12_2,12.2
make
# 這裏會報安裝失敗,原因是無法創建目錄由於 SIP 的原因
sudo make install
由於 SIP 的原因到這一步就無法再繼續了,只能夠關閉 SIP,而關閉 SIP 需要重啓按住 cmd + R 然後再菜單欄中打開終端
# 關閉 SIP
csrutil disable
# 重啓
reboot
然後進入系統之後再次編譯安裝即可成功(可以選擇是否恢復 SIP,重啓並設置 csrutil enable)
最後配置 php.ini
extension = pdo_oci.so
再重啓 Apache sudo apachectl restart,再次訪問項目,已經可以正常打開
到這裏目的已經達成了