【问题标题】:Warning: oci_connect(): OCIEnvNlsCreate() failed警告:oci_connect(): OCIEnvNlsCreate() 失败
【发布时间】:2020-10-20 05:34:44
【问题描述】:

错误

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 安装方法

1. /etc/profile

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

2。下载 oracle 19.6 即时客户端下载/安装

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 设置

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 连接测试 ==> 成功

sqlplus test/test@ORA_TEST 

6.网络服务器安装

yum -y install httpd httpd-devel mod_ssl 

7. php安装

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 启动:无法加载动态库 'oci8.so'

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.控制台 php 测试 ==> 成功

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

11.网站 php 代码 ==> 失败

$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 oci8 php -v, php --ri oci8

【问题讨论】:

  • 能否详细说明您的问题

标签: php oracle oci8


【解决方案1】:

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

【讨论】:

【解决方案2】:

您正在设置很多不需要设置的东西。再次阅读Instant Client installation instructions

我们来看看:

导出 ORACLE_HOME=/usr/lib/oracle/19.6

使用 Oracle Instant Client 时切勿设置 ORACLE_HOME。它可能会导致 ORA-1804 等错误或其他启动问题。

导出 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,您没有运行

导出 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/phphttps://github.com/oracle/docker-images/tree/master/OracleLinuxDevelopers/oraclelinux7/phpPHP Dockerfiles 中的安装说明

【讨论】:

  • “如上所述”不会让我们确定原因。请使用确切的详细信息更新您的原始问题。
猜你喜欢
  • 1970-01-01
  • 2016-05-23
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多