このエラーが発生しました。
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フォルダ内のファイル。
事前に誰かがこの問題を助けてくれます。
私はこの問題と戦うために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の間です。
簡単な手順
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
拡張モジュールによって読み込まれません(または見つかりません)。
確認すること
ここからダウンロード からOracleクライアントをダウンロード
C:\ instantclient_12_1に貼り付けます
Php.iniファイルでその拡張機能を有効にする必要があります。 Oracleインストール を参照してください:
extension=oci8.so
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
有効にするには。その後、すべてのサービスを再起動しましたが、動作するようになりました!これがお役に立てば幸いです。
わかりました、皆さん。
最初、使用
<?php
phpinfo();
?>
そして、あなたのPHPバージョン(7.0.xxxの一番上にある)バージョン、そして、あなたのPHPバージョンアーキテクチャ:x64またはx86そしてスレッドセーフまたは非スレッドセーフ(最初の表に「スレッドセーフ」と記載)。「無効」は明らかに「スレッドセーフではない」ことを意味します。
次の3つのソフトウェアが必要であることは絶対に重要です。
次のいずれかが、スレッドセーフ/スレッドセーフバージョンではない異なるアーキテクチャ用である場合、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ドライバーを使用しています。
お役に立てれば。
OCI8拡張機能を使用してOracleデータベースにアクセスします。 1https://pecl.php.net/package/oci8/2.0.8/windows からphp_oci8.dllをダウンロードします。 (5.6スレッドセーフ(TS)x86)あなたの中に
(xampp\php\ext)フォルダー。
Php.iniファイルを開き、これらのextension = php_oci8.dll extension = php_oci8_11g.dllを追加します
これらのコマンドを使用して、Oracleのバージョンとサービス名を確認してください
show service service_name; service_nameはorclです(このサービス名を覚えておく必要があります)
Instantclient_11_1をダウンロードした後、解凍し、ローカルディスクに貼り付けました。そして、パスC:\ instantclient_11_1をコピーし、このパスをユーザー変数およびシステム変数として設定します。パス変数を設定せずにコードが機能していることに注意してください。
Cmdを開いてSQLに入り、これらのコマンドに従ってスキーマを作成します
connect、resourceをdbnameに付与します。
テーブルuser_infoを作成し、データをテーブルに挿入してコミットします。注:データが挿入されない場合、データをコミットする必要があります。
<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) : ' ').'</td>';
}
print '</tr>';
}
print '</table>';
これを試して
php.iniファイルでコメント解除してください
extension_dir = "./"
「セミコロンを削除」
私はWampをインストールし、すべてが箱から出して動作することを期待していました。そうではない。 x64 Windowsマシン(インスタントおよびフル)に2つのOracleクライアントがあります。他の誰かが同様の設定を持っている場合、インスタントクライアントが(a)Path環境変数にあり、(b)Path変数で完全なクライアントより前にあることを確認するのがコツです。 Windowsには非常に短いセクションがあります here ですが、答えは出ました。
誰かが人生のある時点でこの問題に直面した場合、これは私の話です:
PHP 7.1.6のXAMPP 32ビット
PS:これを達成するために私の人生の2日間。
乾杯
私は同じ問題を抱えていました このページ の解決策は私を助けました、それは互換性のないoci ddlファイルを使用していることが原因です。
それが役に立てば幸い。