前面和网上说的都差很少(和 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
,再次访问项目,已经能够正常打开
到这里目的已经达成了