2

cronジョブとして実行するPHPスクリプトを作成しましたが、実行されていませんでした。スクリプトはブラウザで正常に機能しましたが、コマンドラインからスクリプトを実行すると、次のエラーが発生することがわかりました。

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

私の知る限り、私が使用できる他のユーザー名とパスワードはありません。(私は今それを確認しようとしています。)

私はこのサイトを検索して、同様の問題を抱えている他の誰かを発見しましたが、彼の問題は逆転しました。彼の原因は、コマンドラインとブラウザーが2つの異なるphp.iniファイルを指していることでした。ブラウザとコマンドラインの両方が同じphp.iniファイルを呼び出すことを確認しました。どちらも次のことを示しています。

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

スクリプトがブラウザで機能するのにコマンドラインで失敗する理由は他にありますか?私はOracleSQLに比較的慣れておらず、データベースに直接アクセスできないため、ここからどこに進むべきかわかりません。

ありがとう。

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 に答える