oracle 警告:oci_connect():OCIEnvNlsCreate()失败

cyvaqqii  于 2023-10-16  发布在  Oracle
关注(0)|答案(4)|浏览(290)

错误

Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that LD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries in

Warning: oci_connect(): Error while trying to retrieve text for error ORA-01804

apache php oracle install方法
1. /etc/profile

##################### oracle oci setting
export LD_LIBRARY_PATH=/usr/lib/oracle/19.6/:$LD_LIBRARY_PATH

2.下载oracle 19.6 instantclient下载/安装

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
download instantclient-basic-linux.x64-version.zip
download instantclient-sdk-linux.x64-version.zip
download instantclient-sqlplus-linux.x64-version.zip
unzip * 
mv instantclient_19_6/ /usr/lib/oracle/19.6

3. ldconfig set

echo '/usr/lib/oracle/19.6' > /etc/ld.so.conf.d/oracle-instantclient.conf
ldconfig

4. vi /etc/tnsnames.ora

ORA_TEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ip_address)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = ip_address)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORA_TEST)
      (SERVER = dedicated)
    )
  )

5. oracle connect test ==> success

sqlplus test/test@ORA_TEST

6. web服务器安装

yum -y install httpd httpd-devel mod_ssl

7. php install

yum-config-manager --enable remi-php56
yum --enablerepo=remi-php56 -y install php php-devel php-cli php-common php-mbstring php-mcrypt php-xml php-pear php-curl php-pecl-imagick php-oci8 php-soap

**8. PHP警告:PHP启动:无法加载模块:Public到这里去看看

ln -s /usr/lib/oracle/19.6/libclntsh.so.19.1 /lib64/libclntsh.so.19.1
ln -s /usr/lib/oracle/19.6/libnnz19.so /lib64/libnnz19.so
ln -s /usr/lib/oracle/19.6/libclntshcore.so.19.1 /lib64/libclntshcore.so.19.1

9. phpinfo()oci8 in phpinfo
10. console php test ==>成功

php -r "oci_connect('test', 'test', 'ORA_TEST');"

11. web site php code ==> fail

$oracle = oci_connect('test' , 'test', 'ORA_TEST', "AL32UTF8");

Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that LD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries in

Warning: oci_connect(): Error while trying to retrieve text for error ORA-01804

12. php -v,php -ri oci8php -v, php --ri oci8

e1xvtsh3

e1xvtsh31#

您的Web服务器未正确配置为设置PHP的LD_LIBRARY_PATH。请参阅这篇文章中的类似示例,并确保您为Web服务器运行时正确设置了环境。

yrefmtwq

yrefmtwq2#

你正在设置很多不需要设置的东西。再次阅读Instant Client安装说明。
一起来看看吧:
导出ORACLE_HOME=/usr/lib/oracle/19.6
使用Oracle Instant Client时,请勿设置ORACLE_HOME。它可能导致ORA-1804或其他启动问题等错误。
export TNS_ADMIN=$ORACLE_HOME/network/admin
如果你有一个更简单的安装,你就不需要设置这个。请参阅Instant Client安装说明。
导出LD_LIBRARY_PATH=/usr/lib/oracle/19.6/lib:$ORACLE_HOME/sdk:$LD_LIBRARY_PATH
按照安装说明使用ldconfig,这样就不必担心设置LD_LIBRARY_PATH并确保它传递到Apache(这是PHP的一个常见问题-您可能会遇到)。而且sdk目录中没有库,所以它肯定不需要在那里。
导出DYLD_LIBRARY_PATH=/usr/lib/oracle/19.6/lib:$DYLD_LIBRARY_PATH
这是针对macOS的,您没有运行它
export PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin
导出NLS_LANG=AMERICAN_AMERICA.AL32UTF8
这些可能有用。
mkdir -p /usr/lib/oracle/19.6/bin /usr/lib/oracle/19.6/lib /usr/lib/oracle/19.6/network/admin
ln -s libclntsh.so.19.6 libclntsh.so
ln -s libocci.so.19.6 libocci.so
【……】
这一切看起来非常复杂。为什么不将解压后的目录移动到/opt/oracle/instantclient_19_6之类的地方,然后按照说明运行ldconfig呢?那么你就不需要制作链接、目录、复制文件等。
你可以做得更糟,看看https://github.com/oracle/docker-images/tree/master/OracleLinuxDevelopers/oraclelinux7/php的PHP Dockerfiles中的安装说明。

q5lcpyga

q5lcpyga3#

我也有同样的问题。
是许可。
所有的命令行测试都可以工作,因为它们是以root身份运行的。
当website->php时它不工作,因为它以apache运行。对我来说,修复是确保非root/非Oracle用户可以访问Oracle客户端库。
确保您可以访问LD_LIBRARY_PATH的路径和库的每个元素

wj8zmpe1

wj8zmpe14#

有同样的问题。重新启动Apache服务器解决了这个问题。

相关问题