Linux+ PHP + Oracle 开发部署踩坑记 之 oci_pconnect(): OCIEnvNlsCreate() failed
Date: 2020.9.26 阴天 . 有风 . 凉凉的
背景
手头有一个系统将PHP5.3升级到PHP7.4,但是需要同时使用两个PHP版本,于是乎就给Apache安装了fcgid模块。
安装之后部署PHP7.4的版本之后,出现了 oci_pconnect(): OCIEnvNlsCreate() failed 异常,出现这个的最主要原因是 PHP程序找不到环境中的ORACHE_HOME 和 LD_LIBRARY_PATH 设置,或者说这两种设置有误。
于是乎,排错方向有了!
排错方向1
校验当前环境的这两个值是否正确。
echo $ORACHE_HOME
echo $LD_LIBRARY_PATH
查看echo出来的值是否跟你环境中oracle的安装目录和oracle的库目录一致
解决方案:
cd ~ #进入当前用户目录
vim .bash_profile (or .bashrc)
--- 在末行加入
export ORACLE_HOME='/home/u01/app/oracle/product/11.2.0/db_1'(你的oracle_home路径)
export LD_LIBRARY_PATH='/home/u01/app/oracle/product/11.2.0/db_1/lib'(你的library路径)
如果 ORACLE_HOME 和 LD_LIBRARY_PATH 已存在,修改成正确的路径即可
保存后执行
source ~/.bashrc(or .profile) 让环境变量生效
排错方向2
phpinfo(),直接搜索一下有没有ORACLE_HOME 和 LIBRARY 这两项的环境变量,并检查
解决方案:
php代码中设置环境变量
putenv('LD_LIBRARY_PATH=/home/u01/app/oracle/product/11.2.0/db_1/lib'); //此处要更改为你的oracle的lib路径
putenv('ORACLE_HOME=/home/u01/app/oracle/product/11.2.0/db_1');//此处要更改为你的oracle的路径
var_dump("LD_LIBRARY_PATH:",LD_LIBRARY_PATH);
var_dump("ORACLE_HOME:",ORACLE_HOME);
打印结果是有正确的配置的
排错方向3
在apache 的httpd里的httpd.conf 的项目配置里设置环境变量
<VirtualHost *:80>
DocumentRoot /home/wwwroot/
AddHandler fcgid-script .fcgi .php
#映射fcgi执行脚本
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程 在处理完所有请求前退出
FcgidMaxRequestsPerProcess 1000
#php-cgi每个进程的最大请求数
FcgidIOTimeout 300
#最大执行时间
FcgidIdleTimeout 300
#最大空闲时间
FcgidMaxRequestLen 2097152
#限制最大请求字节
MaxRequestLen 52428800
#php程序最大文件上传限制50MB,默认只有2MB
FcgidInitialEnv PHPRC "/usr/local/php7.4.6/"
#php安装路径
FcgidWrapper "/usr/local/php7.4.6/bin/php-cgi" .php
#php-cgi脚本执行路径
# !!!!!!!!!!!!!! 此处设置 环境变量 !!!!!!!!!!!!!!!!
SetEnv ORACLE_HOME "/home/u01/app/oracle/product/11.2.0/db_1"
SetEnv LD_LIBRARY_PATH "/home/u01/app/oracle/product/11.2.0/db_1/lib:/lib:/usr/lib"
# !!!!!!!!!!!!!! 此处设置 环境变量 !!!!!!!!!!!!!!!!
<Directory "/home/wwwroot/">
</Directory>
总结
排错方向基本上是查找ORACLE_HOME 和 LD_LIBRARY_PATH 环境变量设置是否正确,不正确就想办法让程序能获取到这两个变量的值。
小编用的是第三个排错方向才解决了问题,希望本文能帮助到你~
# 博客小菜鸟,记录日常,不喜尽情喷。