oci_connect从命令行失败但在浏览器中工作

时间:2012-10-01 14:48:09

标签: php oracle command-line

我写了一个PHP脚本作为cron作业运行但它没有运行。该脚本在浏览器中运行良好,但我发现当我从命令行运行它时出现了这个错误:

Warning: oci_connect(): ORA-12154: TNS:could not resolve the connect identifier specified in /usr/apps/webdata/cron/PropogateDB.php on line 190

有问题的一行是:

$conn_NRB = oci_connect($user, $pass, "nrb.njbbnrbpd1");

正如我所说,这个脚本在浏览器中运行良好。

我做了一些挖掘并找到了数据库的配置设置。然后我尝试了这个:

$conn_NRB = oci_connect($user, $pass, "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=nrb)))");

使用此代码,命令行和浏览器都会出现此错误:

Warning: oci_connect() [function.oci-connect]: ORA-01017: invalid username/password; logon denied in /usr/apps/webdata/cron/PropogateDB.php on line 191

据我所知,我没有其他用户名和密码可以使用。 (我现在正试图验证。)

我在这个网站上搜索并发现了其他有类似问题的人,虽然他的问题被逆转了,他的原因是命令行和浏览器指向了两个不同的php.ini文件。我刚确认浏览器和命令行都调用相同的php.ini文件。他们都指出:

Configuration File (php.ini) Path => /usr/local/php/lib

是否还有其他原因导致脚本在浏览器中运行但在命令行中失败?我对Oracle SQL比较陌生,我没有直接访问数据库,所以我不确定从这里开始。

感谢。

1 个答案:

答案 0 :(得分:0)

'EasyConnect'字符串

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=nrb)))

指localhost。 “在浏览器中”可能意味着:服务器上的 (PHP脚本执行的地方)。

除非您在同一服务器的命令行上运行测试,否则应更改连接字符串以引用数据库服务器(可能只是Web服务器的主机名) )。

谨防可能出现的防火墙限制。如果可能,请使用贵公司的tnsnames.ora将数据库实例标识符解析为其连接字符串。