web-dev-qa-db-ja.com

未定義関数oci_connect()の呼び出し

このエラーが発生しました。

Fatal error: Call to undefined function oci_connect()
$conn = oci_connect('localhost', 'username', 'password') or die(could not connect:'.oci_error)

それがコードです。

これは私が得たエラーです。

Fatal error: Call to undefined function oci_connect() in C:\xampp\htdocs\org\org\php\myphp.php on line 51

PHP=DLL extフォルダ内のファイル。

事前に誰かがこの問題を助けてくれます。

9
user3153806

私はこの問題と戦うために3日間だけ過ごします。

Windows 7でOracle接続を使用していましたが、問題はありませんでした。先週、Windows 8を搭載した新しいコンピューターを入手しました。XAMPP1.8.2をインストールします。このサーバー上のすべてのアプリPHP/MySQLは正常に動作します。問題は、PHPアプリをOracle DBに接続しようとしたときに発生しました。

未定義関数oci_pconnect()の呼び出し

そして、変更を加えてApacheを起動/停止すると、「PHP警告:PHP起動:行0で不明)」とログに記録される「PHP起動」の奇妙な「警告」

私はすべてを行いました(コメントを外したphp_oci8.dllとphp_oci8_11g.dll、oci.dllを/ extディレクトリにコピーし、/ Apacheの近くで動作します。InstantClientとNOTHINGのすべてのバージョンをダウンロードします。

神は私の助けに来ました。 Oracle Instant Client 32ビットをダウンロードすると、すべてが正常に機能します。 phpinfo()はoci8情報を表示し、私のアプリは正常に動作します。

したがって、Windowsバージョンがx64であることを決して気にしないでください。リンクは、XAMPPとOracle Instant Clientの間です。

17
Soichiro Cub

簡単な手順

Php.iniで以下の拡張機能を有効にする必要があります

;extension=php_oci8.dll
;extension=php_oci8_11.g.dll

「;」を削除することにより結果が以下になるように:

extension=php_oci8.dll
extension=php_oci8_11.g.dll

Oracle Instant Clientのダウンロード:-32ビットが望ましい。 32ビットは64ビットでも機能します。 google:32ビットのOracleインスタントクライアントウィンドウをダウンロードできます。 extension=php_oci8_11.g.dllは12では動作しないため、クライアントのバージョン11を使用します。パッケージをC:\Oracle\instantclient_11_2などの場所に解凍します。

最後に、システムのPATH環境変数を、ユーザー変数ではなくシステム変数の下の終了位置で変更します

次に、PATHの変更が完全に反映されるようにシステムを再起動する必要があります。

マシンを再起動せずにXAMPP/WAMPを再起動するだけの場合、クライアントのDLL=ファイル(OCL.dll))は、PHPのphp_oci8_11g.dll拡張モジュールによって読み込まれません(または見つかりません)。

6
Elijah Keya

確認すること

  1. XAMP PHPは32ビットでコンパイルされているので(64ビットWindowsマシンがありますが)
  2. ここからダウンロード からOracleクライアントをダウンロード

  3. C:\ instantclient_12_1に貼り付けます

  4. 次に、システム環境変数で上記のパスを設定します
  5. 次に、C:\ xampp\php\php.iniに移動し、コメント解除extension = php_oci8_12c.dll
  6. 次に、XAMPを再起動すると、問題なく動作するはずです。
5
Ron

Php.iniファイルでその拡張機能を有効にする必要があります。 Oracleインストール を参照してください:

extension=oci8.so
4
John Conde

WAMPServer 2.5(32ビット)をインストールしましたが、oci_connectエラーも発生しました。 Oracle 11gクライアント(32ビット)もインストールしました。私が他の投稿で読んだ一般的な修正は、C:\ wamp\bin\php\php5.5.12ディレクトリのphp.iniファイルを変更することでしたが、これは私にとってはうまくいきませんでした。誤解したかもしれませんが、C:\ wamp\bin\Apache\apache2.4.9ディレクトリのphp.iniファイルを変更すると、希望する結果が得られることがわかりました。 Apache php.iniファイルで変更した唯一のことは、セミコロンを削除してextension=php_oci8_11g.dll有効にするには。その後、すべてのサービスを再起動しましたが、動作するようになりました!これがお役に立てば幸いです。

3
ADT

わかりました、皆さん。

最初、使用

<?php 
phpinfo();
?> 

そして、あなたのPHPバージョン(7.0.xxxの一番上にある)バージョン、そして、あなたのPHPバージョンアーキテクチャ:x64またはx86そしてスレッドセーフまたは非スレッドセーフ(最初の表に「スレッドセーフ」と記載)。「無効」は明らかに「スレッドセーフではない」ことを意味します。

次の3つのソフトウェアが必要であることは絶対に重要です。

  1. 同じメジャーバージョンのPHP(7.0.xxxの場合は7.0)
  2. アクセスしているバージョンと同じバージョンのOracle(11g、12gなど)
  3. pHPの同じ非スレッドセーフ/スレッドセーフバージョン
  4. すべて同じアーキテクチャ用です。

次のいずれかが、スレッドセーフ/スレッドセーフバージョンではない異なるアーキテクチャ用である場合、PHPメジャーバージョン番号、またはデータベースバージョン、エラーが発生します。

 1. PHP for Windows
 2. OCI8 PECL Drivers for PHP (https://pecl.php.net/package/oci8)
 3. Oracle Instant Client

要確認:11g Oracleインスタンスに接続する場合、11gドライバーが必要です。

Second、正しいPHP、OCI8 PECLドライバー、およびインスタントクライアントをインストールします。

私が選んだ:

d:\php\ for php
d:\oci\ for instant client
unzip the contents of the OCI8 PECL Driver into d:\php\ext\

Third、Oracleの指示に従ってd:\ php\php.iniを変更します。

1. set the extension directory
2. set only one of the following:
  a. for 11g drivers, use extension=php_oci8_11g.dll
  b. for 12c drivers, use extension=php_oci8_12c.dll
  c. for other Oracle DB drivers, use the correct Oracle extension.

4番目:d:\ oci \(またはインスタントクライアントのインストール場所)をシステムPATHに追加します。

5番目:PCを再起動します。

6番目、コマンドプロンプトで「where oci *」と入力し、oci.dllのインスタントクライアントインストールパスバージョンが存在することを確認します。

7番目、d:\ php \に移動して「php -m」と入力すると、リストにOCI8が表示されます。

「php -m」と入力した後、モジュールのリストにOCI8が表示されない場合は、d:\ php\errorlog.txtを開きます。

次のようなものが表示された場合:

PHP Warning:  PHP Startup: Unable to load dynamic library 'ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.

インスタントクライアントまたはPECLドライバーのダウンロードは、PHPバージョンと同じアーキテクチャではありません。

次のようなものが表示された場合:

PHP Warning:  PHP Startup: Unable to load dynamic library 'ext\php_oci8_12c.dll' - The specified procedure could not be found.

次に、使用しているインスタントクライアントのバージョンに間違ったOCI8 PECLドライバーを使用しています。

お役に立てれば。

2
hype
  1. PHP 5.6.32(cli)(built:Oct 25 2017 16:02:15)のようにphp –versionを確認します。
  2. OCI8拡張機能を使用してOracleデータベースにアクセスします。 1https://pecl.php.net/package/oci8/2.0.8/windows からphp_oci8.dllをダウンロードします。 (5.6スレッドセーフ(TS)x86)あなたの中に
    (xampp\php\ext)フォルダー。

  3. Php.iniファイルを開き、これらのextension = php_oci8.dll extension = php_oci8_11g.dllを追加します

  4. これらのコマンドを使用して、Oracleのバージョンとサービス名を確認してください

    1. Cmdを開きます
    2. sqlplus/sysdbaとして
    3. select * from v $ version; Oracle Database 11g Enterprise Editionリリース11.2.0.1.0-本番、Oracleバージョンは11gであるため、 https://www.Oracle.com/technetwork/topicsからinstantclient_11_1(Instant Client 32-bit)ダウンロードを使用できます/winsoft-085727.html
  5. show service service_name; service_nameはorclです(このサービス名を覚えておく必要があります)

  6. Instantclient_11_1をダウンロードした後、解凍し、ローカルディスクに貼り付けました。そして、パスC:\ instantclient_11_1をコピーし、このパスをユーザー変数およびシステム変数として設定します。パス変数を設定せずにコードが機能していることに注意してください。

  7. Cmdを開いてSQLに入り、これらのコマンドに従ってスキーマを作成します

    1. sqlplus/sysdbaとして
    2. pass123で識別されるユーザーdbnameを作成します。
    3. connect、resourceをdbnameに付与します。

    4. テーブルuser_infoを作成し、データをテーブルに挿入してコミットします。注:データが挿入されない場合、データをコミットする必要があります。

    5. 次に、このスクリプトをhtdocsで実行します
<html>
<head><title>Oracle demo</title></head>
<body>
<?php

// Create connection to Oracle
$conn = oci_connect("dbname", "pass123", "//localhost/orcl");  // orcl is your service_name

$query = 'select * from user_info';
$stid = oci_parse($conn, $query);
$r = oci_execute($stid);

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

これを試して

php.iniファイルでコメント解除してください

extension_dir = "./"「セミコロンを削除」

0
mustafa-naeem

私はWampをインストールし、すべてが箱から出して動作することを期待していました。そうではない。 x64 Windowsマシン(インスタントおよびフル)に2つのOracleクライアントがあります。他の誰かが同様の設定を持っている場合、インスタントクライアントが(a)Path環境変数にあり、(b)Path変数で完全なクライアントより前にあることを確認するのがコツです。 Windowsには非常に短いセクションがあります here ですが、答えは出ました。

0
David Willis
  • Xamppをダウンロードし、xampp 7.2.9の場合はOracle 12c拡張機能または11c 'extension = oci8_11g'のコメントを解除します
  • 32ビットのインスタントクライアントをダウンロードし、そのパスを設定する
  • インスタントクライアント32ビットSDKパッケージをダウンロードし、そのパスを設定します
  • インスタントクライアントとSDK dllファイルをxamp\php\ext、xampp\php \およびxampp\appache\bin \にコピーします
  • トレッドセーフx86の同じphpバージョンのphp-ociをダウンロードし、そのファイルをphp\ext * .dllにコピーします。phpバージョンはxampp adminのphpinfoタブの上部に記述されています。
  • OCI8は、phpadminページまたはApache admin、次にphpadminタブに表示されます。 phpOCIがインストールされたことを意味します。
0
user11161534

誰かが人生のある時点でこの問題に直面した場合、これは私の話です:

  • Windows 10 x64
  • Oracle Express 11g
  • PHP 7.1.6のXAMPP 32ビット

    1. Instant Client Basic 12.1をダウンロードします here (Configureコマンドのphpinfo()で必要なバージョン)。 32ビット用のv12.1をダウンロードしました(私のPCでもx64でした)
    2. Instant Client SDKをダウンロードします(Instant Clientをダウンロードするのと同じサイトにありますが、少し下にスクロールします)
    3. ダウンロードしたファイルをC:ドライブにコピーします:C:\ instantclient_12_1およびその中のSDKはC:\ instantclient_12_1\sdk
    4. システム環境変数にこれら2つの以前のルート(SDKのOracle_PATHおよびOracle_PIN)を追加します
    5. extension = php_oci8_12c.dllextension = php_pdo_oci.dllのコメントを外しますphp.ini(C:\ xampp\php\php.ini)の前にあるセミコロンを削除します。
    6. SYSTEM変数を変更したため、PCを再起動します(この方法でXAMPPも再起動されます)

PS:これを達成するために私の人生の2日間。

乾杯

0
jpacareu

私は同じ問題を抱えていました このページ の解決策は私を助けました、それは互換性のないoci ddlファイルを使用していることが原因です。

それが役に立てば幸い。

0
Frank