PHP7 连oracle 11g 可能出现的pdo_oci_handle_factory,Check the character问题和解决方法
Posted youngqj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP7 连oracle 11g 可能出现的pdo_oci_handle_factory,Check the character问题和解决方法相关的知识,希望对你有一定的参考价值。
错误代码:
SQLSTATE[HY000]: pdo_oci_handle_factory: Error while trying to retrieve text for error ORA-12541
错误代码:
SQLSTATE[HY000]: OCIEnvNlsCreate: Check the character set is valid and that php has access to Oracle libraries and NLS data
解决上述问题可以通过如下方法
首先新建文件 vim /etc/profile.d/oracle.sh
#!/bin/env sh
ORACLE_HOME=/usr/lib/oracle/12.1/client64
TNS_ADMIN=$ORACLE_HOME/network/admin
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LD_LIBRARY_PATH=$ORACLE_HOME/lib
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/lib
export ORACLE_HOME TNS_ADMIN NLS_LANG LD_LIBRARY_PATH PATH
其中 TNS_ADMIN=$ORACLE_HOME/network/admin 是用于指定存放oracle 数据库连接信息的路径,如果你不是次方式连接可以去除此行
NLS_LANG 指定字符集参数,我这边使用的是AL32UTF8 ,请根据你实际情况进行指定。oracle 更多字符集请参考
然后修改 php-fpm.conf 顶部新增如下
. /etc/profile.d/oracle.sh
最终如下效果
prefix=/usr/local/php
exec_prefix=$prefix
php_fpm_BIN=$exec_prefix/sbin/php-fpm
php_fpm_CONF=$prefix/etc/php-fpm.conf
php_fpm_PID=$prefix/var/run/php-fpm.pid
#引入环境变量处
. /etc/profile.d/oracle.sh
最后修改 php-fpm.d/www.conf 文件找到配置进程环境变量的地方,可查找 “env[HOSTNAME]”
新增如下:
;Oracle连接环境变量
env[ORACLE_HOME] =/usr/lib/oracle/12.1/client64
env[LD_LIBRARY_PATH] = /usr/lib/oracle/12.1/client64/lib
重启 php-fpm 搞定
如果开发框架为yii2的话记得修改配置如下:
'dsn' => 'oci:dbname=XXX_online;charset=al32utf8',
以上是关于PHP7 连oracle 11g 可能出现的pdo_oci_handle_factory,Check the character问题和解决方法的主要内容,如果未能解决你的问题,请参考以下文章
Windows下PHP7/5.6以上版本 如何连接Oracle 12c,并使用PDO
Oracle服务总线11G REST api Java连接到OSB时出现套接字问题
使用 Oracle 11g 客户端连接到 Oracle 19C 服务器