我想设置php / nginx连接到一个oracle数据库。
一切都在一台服务器上(testing)
我安装了nginx并将其设置得很好。 我设置PHP和PHP-FPM,并正常工作(testing一些PHP的东西)
我使用pecl install oci8安装了oci8模块,并提供了到我的oracle_home的path,它编译得很好。
但我无法连接到数据库。
我尝试了多个脚本。
我对oracle很新颖。
php-fpm的www错误日志说检查我的oracle_home和ld库path。 我把我的PHP脚本设置为一个testing,但仍然失败。
有任何想法吗?
<?php PutEnv("ORACLE_SID=orcl"); PutEnv("ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1/"); PutEnv("TNS_ADMIN=/opt/app/oracle/product/11.2.0/dbhome_1/network/admin"); PutEnv("LD_LIBRARY_PATH=/opt/app/oracle/product/11.2.0/dbhome_1/lib"); $c = oci_connect("testuser", "testpassword", "127.0.0.1"); if (!$c) { echo "Unable to connect: " . var_dump( oci_error() ); die(); }
ETCETC
从错误日志:
[10-Dec-2010 17:25:58] PHP警告:oci_connect():OCIEnvNlsCreate()失败。 你的系统有问题 – 请检查是否设置了ORACLE_HOME和LD_LIBRARY_PATH,并指向第6行/usr/share/nginx/html/orcl2.php中正确的目录
编辑:我将nginx用户添加到oinstall组用于testing目的,现在我得到更好的错误消息,所以我越来越。
现在的错误是:
数组(4){[“代码”] => int(12504)[“消息”] =>string(70)“ORA-12504:TNS:侦听器没有被赋予CONNECT_DATA中的SERVICE_NAME”[“offset”] => int(0)[“sqltext”] =>string(0)“”}}无法连接:
编辑2:做完以下后,我现在能够使用sqlplus命令连接我的testing用户,但PHP仍然失败。
SQL> alter system set LOCAL_LISTENER='10.99.101.2' scope=both; SQL> alter system register; SQL> alter system set SERVICE_NAMES='10.99.101.2' scope=both;
编辑3:如果我使用php命令行来运行我的testing脚本,它工作正常,所以Nginx的/ envvariables的Nginx的东西是错误的。
EDIT4:Listener.ora:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl) (ORACLE_HOME = /opt/app/oracle/product/11.2.0/dbhome_1/) (PROGRAM = extproc) ) (SID_DESC= (GLOBAL_DBNAME=orcl) (ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1/) (SID_NAME=orcl) ) ) SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.99.101.2)(PORT = 1521)) ) ) ADR_BASE_LISTENER = /opt/app/oracle tnsnames.ora: ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.99.101.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) ) sqlnet.ora NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) ADR_BASE = /opt/app/oracle
您的连接string不正确。 你确定“ orcl ”是你的数据库的SID,而不是你的tnsnames.ora(应该在$ TNS_ADMIN /)中的服务名称或条目名称吗?
以下命令的结果是什么?
$ORACLE_HOME/bin/tnsping orcl $ORACLE_HOME/bin/lsnrctl status
你能使用下面的命令连接到你的数据库吗?
$ORACLE_HOME/bin/sqlplus "testuser"/"testpassword"@orcl