2

我编写了一个 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 比较陌生,我没有直接访问数据库的权限,所以我不确定从这里去哪里。

谢谢。

4

1 回答 1

0

“EasyConnect”字符串

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

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

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

当心可能会阻碍的防火墙限制。如果可能,最好使用贵公司的tnsnames.ora将数据库实例标识符解析为其连接字符串。

于 2012-10-01T14:52:28.137 回答