5

更新 (2010 年 5 月 21 日) 成功!

したがって、$head->desk() を何度も実行した後、解決しました。

仮想化の設定に応じて、使用するインスタント クライアントのバージョンに注意してください。

私は一般的な Instant Client をインストールしていました (ESX サーバーが Intel ではなく AMD プロセッサ上にあることに気づいていませんでした)。内部的には問題なく動作していました (内部の ESXi サーバーは 64 ビットではないため、CentOS のインストールは 32 ビットでした)。AMD64 上にある仮想化サーバーで 32 ビットのインストールを実行している場合でも、どのインスタント クライアントをインストールするかは依然として重要です。

最後にチェックしようと思ったのはこれでしたが、現在はすべて正常に動作しています。

これを理解するためにあらゆる可能なテストを実行するのを手伝ってくれたすべての人に感謝したいと思いますが、結局、仮想化の違いに気付かなかったのは私のせいでした.


更新 (2010 年 5 月 21 日) 内部で新しい VM にインストールしたときに、このバグを回避したと思っていましたが、狭まるリンクを見つけました。

これを投稿したとき、これを本番サーバーにインストールしようとしていました。1 週間の進捗がなく、開発に戻る必要があった後、社内サーバーの VM に Crap... CentOS を新しくインストールし、インスタント クライアントと oci8 を新しくインストールしました。

完璧に機能しました。

ただし、VM の正確なコピーを運用サーバーにアップロードしたところ、魔法のように機能しなくなりました。すべてを再インストールしようとしましたが、役に立ちませんでした。

したがって、絞り込むことができる唯一のことは、ファイアウォールの問題 (127.0.0.1 を試したときに同じ問題が発生しますが) またはおそらく ESX (実稼働サーバー) サーバーの問題であり、内部サーバーは ESXi を実行しています。

何かご意見は?

更新 (2010 年 3 月 8 日) Xdebug をインストールして、コードをトレースします。これは私が得ている出力です:

TRACE START [2010-03-08 17:53:05]
    0.2090     327864   -> {main}() /data/aims3/http/octest.php:0
    0.2091     327988     -> ini_set(string(14), string(1)) /data/aims3/http/octest.php:3
    0.2093     327920     -> error_reporting(long) /data/aims3/http/octest.php:4
    0.2094     328048     -> oci_connect(string(8), string(8), string(25)) /data/aims3/http/octest.php:6

トレースはその時点で停止します。

すべてを同じ方法でローカル サーバーにインストールしましたが、正常に動作します。私が完全に途方に暮れていると言うことは、それを軽く置くことです.


*注: make test を実行したところ、すべてのテストで FAIL が返されました。同じエラーが報告されるかどうかを確認するために、作業中のマシンでこれを実行したことはありません。make test が FAIL を報告するのに、make がエラーを報告しない理由は何ですか?

OCI8 PECL パッケージと一緒にエラーが報告されていない状態で Oracle Instantclient をインストールしましたが、途方にくれました。oci_connect で接続を開こうとすると、PHP スクリプト全体が停止します。

例:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
$conn = oci_connect("username", "password", "host");
echo "after";
?>

完全な空白ページを返します。モジュールがロードされ (phpinfo に表示されます)、すべてがエラーなしでインストールされます。

私は完全に途方に暮れています。

CentOS: 5.4

アパッチ: 2.2.3

PHP: 5.3.1

インスタントクライアント: 11.2

oci8: 1.4.1

何かご意見は?

ノート

Apache エラーログは何も報告しません

試みられたデバッグ:

1:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');
echo "after";
?>

戻り値:

beforeafter

2:

ホストを //host に変更する

戻り値:

同じエラー

4

5 に答える 5

3

Apache の error_log に何かありますか? これは mod_php ですか、FastCGI ですか、それとも通常の CGI PHP ですか? コマンドラインからスクリプトを実行するとどうなりますか?

PHP のエラー ログを設定して、そこを調べてみることもできます。


EDIT1:試してください:

echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');

そして結果発表…


EDIT2:よくわかりません。私の最善の策は、PHPマニュアルからのこの情報です:

OCI8 のインストールに関する最も一般的な問題は、Oracle 環境が正しく設定されていないことです。これは通常、oci_connect() または oci_pconnect() を使用する際の問題として現れます。このエラーは、Call to undefined function oci_connect() などの PHP エラー、ORA-12705 などの Oracle エラー、さらには Apache クラッシュの可能性があります。Apache ログ ファイルで起動エラーを確認し、上記のセクションを参照してこの問題を解決してください。

他にブライアンを助けるアイデアを持っている人はいますか?

于 2010-03-05T20:21:47.987 に答える
1

ブライアン、

正直に言うと、私はこれを 2 年前に試しましたが、惨めなほど失敗しました。:) 自分でコンパイルしても、OCI 関数を動作させることができませんでした。

しかし、それをやり遂げるために別の解決策を探したところ、Zend Core for Oracle で見つけました。ダウンロードしてインストーラーを実行するだけで完了です。Apache/PHP、MySQL (オプション)、および InstantClient がインストールされます。

現在は Zend Server として、基本的に同じ製品です。これはあなたが望んでいた解決策ではないかもしれませんが、それがうまくいくなら...

Zend サーバー

于 2010-05-13T15:15:44.323 に答える
0

oci_connect() の戻り値を確認したり、oci_error() を呼び出したりすることはありませんが、PHP クラッシュに苦しんでいるように見えるため、問題とは関係がないようです。あなたにも影響を与える可能性のある RHEL の未解決のバグがあります。

http://pecl.php.net/bugs/bug.php?id=16626

自分で oci8 パッケージをビルドしましたか? サードパーティのバイナリを使用していますか?

于 2010-03-08T16:58:27.297 に答える
0

修正されました。詳細については上部を参照してください。ただし、ここにクリフ ノートがあります。仮想化環境は重要です。

于 2010-05-22T03:41:39.453 に答える
0

リモートまたはローカルデータベースに接続していますか? localhost の場合、「host」を「false」に置き換える必要があると思います。私は、これがあなたを助けることを願っています...

編集: パラメータが不足していると思います... 私の最後の提案は次のとおりです: 1. ポートを設定する必要があります (デフォルト 1521) AND/OR 2. データベース名を入力する必要があります AND/OR インスタンス名を設定する必要があります ( ORACLE_SID パラメータ)

于 2010-03-05T21:02:43.687 に答える