错误
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
4条答案
按热度按时间e1xvtsh31#
您的Web服务器未正确配置为设置PHP的LD_LIBRARY_PATH。请参阅这篇文章中的类似示例,并确保您为Web服务器运行时正确设置了环境。
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中的安装说明。
q5lcpyga3#
我也有同样的问题。
是许可。
所有的命令行测试都可以工作,因为它们是以root身份运行的。
当website->php时它不工作,因为它以apache运行。对我来说,修复是确保非root/非Oracle用户可以访问Oracle客户端库。
确保您可以访问LD_LIBRARY_PATH的路径和库的每个元素
wj8zmpe14#
有同样的问题。重新启动Apache服务器解决了这个问题。