我正在使用 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 错误(不太可能,因为没有错误)。
这是我解决问题的尝试:
我尝试从这个网站复制基本查询示例。我修改了“hr”和“welcome”,并在我的新设置上运行它(它在旧设置上运行良好)。这是结果:
oci_connect(): OCIEnvNlsCreate() 失败。您的系统有问题 - 请检查 ORACLE_HOME 和 LD_LIBRARY_PATH 是否已设置并指向正确的目录。尝试检索错误 ORA01804 的文本时出错
我还尝试在 /etc/sysconfig/ 中打开 httpd 文件并在其中添加以下行:
LD_LIBRARY_PATH="/u01/apps/oracle/product/11.2.0/xe/lib
导出LD_LIBRARY_PATH
然而,当我尝试在 CLI 中回显 $LD_LIBRARY_PATH 时,它不会返回任何内容。它确实出现在 phpinfo() 中,但:
这与 $ORACLE_HOME 形成对比,我必须通过在 CLI 中键入每次启动手动加载它. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
,并且不会出现在环境下,但至少可以回显' d。
环境下的旧设置中有很多变量;LD_LIBRARY_PATH、ORACLE_HOME 和 ORACLE_SID 是最值得注意的。不过,我只在 envvars 文件中看到 LD_LIBRARY_PATH 。我是否也应该将它们添加到 httpd 文件中?
对不起,我不是一个 Linux 人。对此的任何帮助将不胜感激。