前面和網上說的都差很少(和 Linux 編譯安裝相似),去 Oracle 下載以下的安裝包(能夠選擇版本,我這裏選擇的是 12.2)php
因爲 macOS 開啓了
SIP 基本上全部的操做都須要在
/usr/local/
目錄下進行
解壓:html
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 默認並無安裝這個命令;這個時候也沒有安裝 Homebrewgit
因此我先安裝 Pear,先是參考這篇文章github
curl -O https://pear.php.net/go-pear.phar php -d detect_unicode=0 go-pear.phar
如下摘錄於官方文檔sql
You're now ready to configure PEAR for installation.macos
First you need to change the Installation Base.apache
- So type 1, and then press Enter.
- Enter /usr/local/pear
- Press Enter.
Then, you will need to change the Binaries directory.vim
- Type 4, and then press Enter.
- Enter /usr/local/bin
- Press Enter.
到這裏基本上可使用 pecl
了,執行以下命令segmentfault
sudo pecl install oci8
運行安裝表示仍是會報錯缺失 PHP_AUTOCONF
未配置; 查詢以後得知須要安裝 autoconf
而且不建議直接安裝(說是太多依賴,我沒有驗證),應該使用 Homebrewruby
安裝 Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
因爲衆所周知的緣由, 慢如蝸牛; 因而查詢解決方案, 參考以下
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 -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
,再次訪問項目,已經能夠正常打開
到這裏目的已經達成了