我正在使用Oracle 11g,PHP 5.5.4,Apache 2.4.6和PEAR 1.9.4运行Linux Fedora 19设置。除此之外,我还下载并启用了用于PHP的OCI8插件,并下载了MDB2和MDB2_Driver_oci8。
目标是将我的网页连接到Oracle 11g数据库。这已经在现有设置中工作(我没有这样做),我正在尝试在新设置中复制它。
出于某种原因,在新服务器中,它不起作用。它会产生错误:
_doConnect:[错误消息:无法建立连接] ** oci8(oci8):// gbsihr:xxx @ localhost:1521 /
尝试连接数据库服务器时发生错误。 错误消息:MDB2错误:连接失败
我真的不知道这意味着什么。这是我的PHP连接功能:
<?php
include_once('includes/configure.inc');
require_once 'MDB2.php';
function DB_connect($intSilent = -1){
$db_dsn = $_SESSION['DB_Type'] ."://";
$db_dsn .= $_SESSION['DB_Username'] .":";
$db_dsn .= $_SESSION['DB_UserPassword'] ."@";
$db_dsn .= $_SESSION['DB_Host'] .":";
$db_dsn .= $_SESSION['DBPort'] ."/?service=";
$db_dsn .= $_SESSION['DB_DbName'];
if (PEAR::isError($dbconnect)) {
print '<pre>';var_dump($intSilent);print '</pre>';
print '<pre>';var_dump($db_dsn);print '</pre>';
print '<pre>';print $dbconnect->getDebugInfo();print '</pre>';
echo "An error occurred while trying to connect to the database server.<br>\n";
echo "Error message: " . $dbconnect->getMessage() . "<br>\n";
echo "A more detailed error description: " . $dbconnect->getDebugInfo() . "<br>\n";
exit();
// Check whether the object is a connection or
if($_SESSION["gENDebugInfo"] == "On"){
$_SESSION["gErrorNote"] = $dbconnect->getDebugInfo();
}
if ($intSilent < 0) {
header("Location:" . $_SESSION["gENWebRoot"] . "showerror.php?ec=1003"); // Failed to connect
exit();
}
}else{
$dbconnect->setOption('portability', MDB2_PORTABILITY_ALL);
}
return $dbconnect;
}
?>
这是configure.inc的内容:
$_SESSION["gENWebRoot"] = '/hrweb/';
$_SESSION['DB_Type'] = 'oci8';
$_SESSION['DB_Host'] = 'localhost';
$_SESSION['DB_Username'] = 'gbsihr';
$_SESSION['DB_UserPassword'] = 'ids21';
$_SESSION["DBPort"] = '1521';
$_SESSION['DB_DbName'] = 'xe';
由于这适用于其他设置,我不确定错误在哪里。 OCI8似乎是有序的,虽然我确实通过了箍来让它发挥作用。
我做了一些研究,只有两个模糊的结果 - 一个指向oci8.php本身,另一个是Oracle TNS错误(不太可能,因为没有错误)。
以下是我尝试解决问题的方法:
我尝试从this website复制基本查询示例。我修改了“hr”和“welcome”,并在我的新设置上运行它(它在较旧的设置上运行正常)。这就是结果:
oci_connect():OCIEnvNlsCreate()失败。有一些问题 你的系统 - 请检查ORACLE_HOME和LD_LIBRARY_PATH是否正确 设置并指向正确的目录。尝试时出错 检索错误的文本ORA01804
我也尝试在/ etc / sysconfig /中打开httpd文件并向其中添加以下行:
LD_LIBRARY_PATH =“/ U01 /应用/ ORACLE /产品/ 11.2.0 / XE / lib中
export LD_LIBRARY_PATH
但是当我尝试在CLI中回显$ LD_LIBRARY_PATH时,它不会返回任何内容。它确实出现在phpinfo()中,但是:
这与$ ORACLE_HOME相反,我必须通过在CLI中键入. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
来手动加载每个启动,并且不会出现在环境下,但至少可以回显。
环境下的旧设置中有很多变量; LD_LIBRARY_PATH,ORACLE_HOME和ORACLE_SID是最值得注意的。不过,我只在envvars文件中看到LD_LIBRARY_PATH。我应该将它们添加到httpd文件中吗?
对不起,我不是一个Linux用户。对此有任何帮助将非常感激。
答案 0 :(得分:1)
我建议您尝试使用普通oci8函数和用于MDB2的相同登录参数连接到oracle数据库。
我的猜测是,这也会失败,但可能会给你更多的错误细节。
答案 1 :(得分:0)
你能连接到php以外的oracle吗? 我假设你有一个有效的tns.ora文件设置。
我需要在VirtualHost定义中设置这两行,注意TNS_ADMIN也是定义的,也许你也这样做了:
SetEnv ORACLE_HOME /opt/oracle/instantclient
SetEnv TNS_ADMIN /usr/lib/oracle/11.2/client/network/admin/network/admin**
答案 2 :(得分:0)
只需添加此行
即可$ dbconnect = DB :: connect($ db_dsn);
运作DB_connect
像这样
...
$dbconnect = DB::connect($db_dsn);
if (PEAR::isError($dbconnect)) { ...