博客 / 詳情

返回

macOS Mojave 安裝 PHP OCI8/PDO_OCI

前面和網上説的都差不多(和 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.

  1. So type 1, and then press Enter.
  2. Enter /usr/local/pear
  3. Press Enter.

Then, you will need to change the Binaries directory.

  1. Type 4, and then press Enter.
  2. Enter /usr/local/bin
  3. 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 下編譯就是一模一樣的了)

  1. 查看 PHP 版本 php -v 得到版本 7.1.23 那麼去 PHP 官網下載對應版本的源碼 https://www.php.net/releases/
  2. 解壓到方便操作的地方,比如我放在桌面
  3. 進入目錄後進入 ext/pdo_oci/
  4. 將命令行切換到這個目錄,然後運行 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,再次訪問項目,已經可以正常打開

到這裏目的已經達成了

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.