我写了一个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比较陌生,我没有直接访问数据库,所以我不确定从这里开始。
感谢。
答案 0 :(得分:0)
'EasyConnect'字符串
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=nrb)))
指localhost。 “在浏览器中”可能意味着:服务器上的 (PHP脚本执行的地方)。
除非您在同一服务器的命令行上运行测试,否则应更改连接字符串以引用数据库服务器(可能只是Web服务器的主机名) )。
谨防可能出现的防火墙限制。如果可能,请使用贵公司的tnsnames.ora
将数据库实例标识符解析为其连接字符串。