环境: Linux Docker PHP7.3.31
1. 进入docker容器 docker exec -it xxxxx /bin/bash
2. cd /usr/local/src
oracle_client等文件会放在这个文件夹下
3. 前往oracle官网下载我们需要的压缩包文件 Oracle下载点我
4. 分别下载如下三个文件 我这里是下载的11.2版本
(1)instantclient-basic-linux.x64-11.2.0.4.0.zip
(2)instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
(3)instantclient-sdk-linux.x64-11.2.0.4.0.zip
5. 下载完成后通过FTP或者宝塔等其他形式上传到docker容器内放在/usr/local/src
目录下, 注意!!! 不要传到宿主机了
6. 分别解压刚刚下载上传的3个文件unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip
7. 3个解压后会得到 instantclient_11_2
目录 将文件夹改名(改不改都行) mv ./instantclient_11_2 ./instantclient
8. 进入instantclient目录 cd instantclient
9. 创建链接ln -s libnnz11.so libnnz.so
ln -s libclntsh.so.11.1 libclntsh.so
ln -s libocci.so.11.1 libocci.so
10. 增加环境变量 vi. /ext/profile
在末尾新增
export ORACLE_HOME=/usr/local/src/instantclient
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=/usr/local/src/instantclient/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/src/instantclient
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
保存后执行
source /etc/profile #使配置文件立刻生效
echo $ORACLE_HOME #查看一下配置的环境变量是否成功
/usr/local/src/instantclient
12. 返回 cd /usr/local/src
目录
13. 下载OCI8拓展 wget https://pecl.php.net/get/oci8-2.2.0.tgz
14. 解压 tar -zxvf oci8-2.2.0.tgz
15. 进入 cd oci8-2.2.0 拓展解压后的目录
16. 找到你的PHP安装路径下的phpize
(我这里用了宝塔所以) 执行 /www/server/php/73/bin/phpize
, 没有宝塔的找到自己对应的php安装路径下的phpize
17. 执行 /configure --with-php-config=/www/server/php/73/bin/php-config --with-oci8=instantclient,/usr/local/src/instantclient
(/www/server/php/73/bin/php-config
也是你自己的php安装路径下的php-config)
18. 在执行make && make install
执行完毕oci8拓展就安装完成了
19. 在安装pdo_oci拓展 该扩展在php源码扩展包中存在无需额外下载 直接使用即可 (如果是宝塔在/www/server/php/你的PHP版本/src/ext/ 目录下) 执行 cd /www/server/php/73/src/ext/pdo_oci
20. 找到你的PHP安装路径下的phpize
(我这里用了宝塔所以) 执行 /www/server/php/73/bin/phpize
, 没有宝塔的找到自己对应的php安装路径下的phpize
21. 执行 ./configure --with-php-config=/www/server/php/73/bin/php-config --with-pdo-oci=instantclient,/usr/local/src/instantclient
(/www/server/php/73/bin/php-config
也是你自己的php安装路径下的php-config)
22. 在执行make && make install
执行完毕pdo_oci拓展就安装完成了
23. 在找到PHP配置文件增加extension=oci8.so
extension=pdo_oci.so
24. 至此拓展安装完成 运行phpinfo() 会出现oci8*
注:
如果遇到如下报错 请执行 dnf install -y libnsl*
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8.so' (tried:
/www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/oci8.so (libnsl.so.1: cannot open
shared object file: No such file or directory), /www/server/php/73/lib/php/extensions/no-debug-
non-zts-20180731/oci8.so.so (/www/server/php/73/lib/php/extensions/no-debug-non-zts-
20180731/oci8.so.so: cannot open shared object file: No such file or directory)) in Unknown on
line 0
报错原因可以使用 ldd /www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/oci8.so
查看拓展文件xx.so查看 会发现 libnsl.so.1 => not found
执行 dnf install -y libnsl*
就可以了
linux-vdso.so.1 (0x00007ffef858d000)
libclntsh.so.11.1 => /usr/local/src/instantclient/libclntsh.so.11.1 (0x00007f84ef21a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f84eee55000)
libnnz11.so => /usr/local/src/instantclient/libnnz11.so (0x00007f84eea88000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f84ee884000)
libm.so.6 => /lib64/libm.so.6 (0x00007f84ee502000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f84ee2e2000)
libnsl.so.1 => not found
libaio.so.1 => /lib64/libaio.so.1 (0x00007f84ee0df000)
/lib64/ld-linux-x86-64.so.2 (0x00007f84f1db8000)
执行 dnf install -y libnsl*
后
linux-vdso.so.1 (0x00007ffd670c9000)
libclntsh.so.11.1 => /usr/local/src/instantclient/libclntsh.so.11.1 (0x00007f8d00e76000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8d00ab1000)
libnnz11.so => /usr/local/src/instantclient/libnnz11.so (0x00007f8d006e4000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f8d004e0000)
libm.so.6 => /lib64/libm.so.6 (0x00007f8d0015e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8cfff3e000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f8cffd25000) 就有了
libaio.so.1 => /lib64/libaio.so.1 (0x00007f8cffb22000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8d03a14000)
对于PHP PDO连接Oracle数据库查询中文乱码问题
- 找到php安装目录下的etc目录下的php-fpm.conf文件 如图
在最后一行新增: env[NLS_LANG]=AMERICAN_AMERICA.AL32UTF8