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问题和解决方法)