1

データベース クラスのプロジェクト用にサーバーをセットアップしようとしています。プロジェクトを php で作成し、apache 経由で展開し、リモートの oracle サーバーに接続します。オラクル接続部分に問題があります。Oracle の InstantClient バージョン 10.2 とともに OCI8 モジュールをインストールしました。コンソールから次のプログラムを実行すると、正しい出力が得られたので、機能していると思いました。
プログラム:

<?php
$conn = oci_connect("asdf", "asdf", "asdf");
if (!$conn) {
   die("connection error\n");
}

$stid = oci_parse($conn, 'SELECT * FROM PARTS');
if (!$stid) {
   die("statement parsing error\n");
}

$r = oci_execute($stid);
if (!$r) {
   die("execution error\n");
}

print "<table border='1'\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
   print "<tr>\n";
   foreach ($row as $item) {
      print "\t<td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
   }
   print "</tr>\n";
}
print "</table>\n";

oci_free_statement($stid);
oci_close($conn);
?>

結果:
<table border='1'>
<tr>
<td>1</td>
<td>wrench</td>
<td>silver</td>
</tr>
<tr>
<td>2</td>
<td>hammer</td>
<td>brown</td>
</tr>
</table>

だから私はすべてが大丈夫だと思った。しかし、ブラウザで同じ php ページにアクセスすると、次のエラー メッセージが表示されます。
Fatal error: Call to undefined function oci_connect() in /home/eric/apache2/htdocs/realestate/basicQuery.php on line 2
コマンド ラインと apache で 2 つの異なるバージョンの php が使用されている可能性があると考えたため、phpinfo(); を実行しました。両方のための。しかし、どちらも同じ php 情報 (PHP バージョン 5.2.10-2ubuntu6.4) で戻ってきました。これらは異なる php.ini ファイル (/etc/php5/apache2/php.ini と /etc/php5/cli/php.ini) を使用していますが、どちらもまったく同じです。ある環境と別の環境で異なる可能性があるものを他にどこで探すべきかわかりません。
助けてくれてありがとう!

4

3 に答える 3

0

PHP は、拡張機能をどこからロードするかを知る必要があります (これにより、PHP と Oracle が提供するライブラリが橋渡しされます)。CLI から動作するため、パッケージがインストールされているようです。

ini ファイルが同じ場合は、以下も確認する必要があります。

1) Oracle ライブラリを構成した後、Apache を再起動することを覚えていましたか?

2) ウェブサーバーは chroot として実行されていますか?

3) oci8 拡張機能のパーミッションは何ですか? (つまり、Web サーバーの uid で読み取り可能か)

また、oracle .so ファイルへのパスを ld.so.conf に追加し、ldd を実行するか、環境変数を微調整する必要がありますが、これをスキップすると、記述したエラーとは異なるエラーが発生します。

HTH

C.

于 2010-04-06T20:44:52.840 に答える
0

システムにoci8拡張機能がインストールされていますか? インストールされていない場合は、以下のリンクに従ってインストールしてください。

理解のためにこれを参照してください。 PHP用のLinuxにoci8拡張機能をインストールしますか?

インストールの明確な手順については、このリンクを参照してください。 http://www.oracle.com/technetwork/articles/dsl/technote-php-instant-12c-2088811.html

次のものが設定されているかどうか、php.ini ファイルを確認してください。

extension=oci.so

extension_dir="Your path where .so files are present"

インストール後、apache を再起動する必要があります。これが役立つかどうか教えてください。

于 2015-12-18T10:16:30.893 に答える
0

OCI8 モジュールが適切にインストールされていない、apache によってロードされていない、または依存関係がインストールされていないなど、さまざまな問題が発生する可能性があります。

OCI8のインストール

OCI8 をインストールする最も簡単な方法は、pecl を使用することです。

pecl install oci8-2.0.12 # for PHP 5.5/6

モジュールの有効化

次に、 を に配置してロードする必要がありextension=oci8.soますphp.ini

ここで、構成にoci8.soファイルがあることを確認しextension_dirます。これは phpinfo または running で見つけることができますphp -i | grep extension_dir。たとえば、私のは/usr/lib/php/20131226です。

Apache の実行を再起動し、phpinfo に設定apachectl restartがあるかどうかを確認します。oci8

慈悲のショット

すべてを試してもうまくいかなかった場合 (私はすでにそうなっています)、 がlibaio1システムにインストールされていることを確認してください。そうでない場合は、実行してインストールしapt install libaio1、Apache を再起動します。私の場合、それはうまくいきました。それが役立つことを願っています。

于 2017-05-24T15:10:37.913 に答える