繁体   English   中英

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

[英]Warning: oci_connect(): OCIEnvNlsCreate() failed

错误

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/配置文件

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

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. web 服务器安装

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. web 站点 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, ZE1BFD7602321E419CEE4

您的 web 服务器未正确配置为为 PHP 设置 LD_LIBRARY_PATH。 有关类似示例,请参阅此帖子,并确保为 web 服务器运行时正确设置环境。

您正在设置很多不需要设置的东西。 再次阅读Instant Client 安装说明

让我们来看看:

导出 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/php的 PHP Dockerfiles 中的安装说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM