14

I got this error.

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

that is the code.

This is the error I got.

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

I checked the PHP DLL files in ext folder.

starball
  • 20,030
  • 7
  • 43
  • 238
user3153806
  • 161
  • 1
  • 3
  • 6

13 Answers13

21

I just spend THREE WHOLE DAYS fighting against this issue.

I was using my ORACLE connection in Windows 7, and no problem. Last week I Just get a new computer with Windows 8. Install XAMPP 1.8.2. Every app PHP/MySQL on this server works fine. The problem came when I try to connect my php apps to Oracle DB.

Call to undefined function oci_pconnect()

And when I start/stop Apache with changes, a strange "Warning" on "PHP Startup" that goes to LOG with "PHP Warning: PHP Startup: in Unknown on line 0"

I did everything (uncommented php_oci8.dll and php_oci8_11g.dll, copy oci.dll to /ext directory, near /Apache and NOTHING it works. Download every version of Instant Client and NOTHING.

God came into my help. When I download ORACLE Instant Client 32 bits, everything works fine. phpinfo() displays oci8 info, and my app works fine.

So, NEVER MIND THAT YOUR WINDOWS VERSION BE x64. The link are between XAMPP and ORACLE Instant Client.

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
Soichiro Cub
  • 211
  • 2
  • 3
  • I have this problem too... I'm on Windows 7 64-bit and just realized I have the 64-bit version of Oracle XE 11.2 installed and I have the instant client 32 bits installed...maybe that's my problem (Do all of these have to be 32-bit to work together?) Which version of Oracle are you using? – brims Dec 03 '14 at 17:09
  • 5
    I think the point is that XAMPP works in 32-bit, and can therefore only work with the Oracle 32-bit driver. The Oracle client 32-bit is intelligent enough to be able to talk with the 64-bit server version. But XAMPP-32 is not intelligent enough to work with the Oracle 64-bit client driver. – cartbeforehorse Apr 17 '15 at 18:15
  • 1
    You are my hero right now, I also downloaded the 64 bit version and have been trying to figure this issue out all night! I am using Windows 10, the problem still exists. – Gordnfreeman Dec 17 '15 at 04:19
9

Simple steps

You need to enable the below extension in your php.ini

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

by removing the ";" so that the results will below:

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

Download Oracle Instant Client:- Preferably 32 bit. 32 bit will also work on 64 bit. You can just google: download oracle instant client windows 32 bit. Use version 11 of the client because extension=php_oci8_11.g.dll won't work with 12. Unzip the package into a location such as C:\Oracle\instantclient_11_2.

Finally modify the System's PATH Environment Variable with end location, under system variables not user variables

Then you need to restart the System for PATH changes to fully propagate.

If you just restart XAMPP/WAMP without restarting the machine the Client's DLL files (i.e. OCL.dll) will not be loaded (nor found) by PHP's php_oci8_11g.dll extension.

Ivanka Todorova
  • 9,964
  • 16
  • 66
  • 103
Elijah Keya
  • 331
  • 3
  • 2
5

You need to enable that extension in your php.ini file. See Oracle Installation:

extension=oci8.so
John Conde
  • 217,595
  • 99
  • 455
  • 496
5

Things to Make sure

  1. Whenever you connecting Oracle Database , try to use 32 Bit oracle client libraries, Since XAMP PHP is compiled with 32 Bit(Though you have 64 Bit windows Machine)
  2. Download Oracle Client from Download From here

  3. Paste it in C:\instantclient_12_1

  4. Then Set the path to above in System Environment Variable
  5. Then Go to C:\xampp\php\php.ini and uncomment extension=php_oci8_12c.dll
  6. Then Restart the XAMP and it should work without any Issue.
Mahesh G
  • 1,226
  • 4
  • 30
  • 57
3

I installed WAMPServer 2.5 (32-bit) and also encountered an oci_connect error. I also had Oracle 11g client (32-bit) installed. The common fix I read in other posts was to alter the php.ini file in your C:\wamp\bin\php\php5.5.12 directory, however this never worked for me. Maybe I misunderstood, but I found that if you alter the php.ini file in the C:\wamp\bin\apache\apache2.4.9 directory instead, you will get the results you want. The only thing I altered in the apache php.ini file was remove the semicolon to extension=php_oci8_11g.dll in order to enable it. I then restarted all the services and it now works! I hope this works for you.

ADT
  • 139
  • 1
  • 10
3
  1. Check your php –version as like as PHP 5.6.32 (cli) (built: Oct 25 2017 16:02:15).
  2. Using the OCI8 extension to access Oracle Database. So Download php_oci8.dll from 1https://pecl.php.net/package/oci8/2.0.8/windows. (5.6 Thread Safe (TS) x86 ) php_oci8.dll must be the same version with your php version.Then unzipped it and you will find 1.php_oci8.dll 2.php_oci8_11g.dll (as per your oralce version) these two file pasted into your
    (xampp\php\ext) folder.

  3. Open your php.ini file and add these extension=php_oci8.dll extension=php_oci8_11g.dll

  4. Check your oracle version and service name using these commands

    1. Open your cmd
    2. sqlplus / as sysdba
    3. select * from v$version; Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production, our oracle version is 11g so we can use instantclient_11_1 (Instant Client 32-bit) downloads from https://www.oracle.com/technetwork/topics/winsoft-085727.html
  5. show parameter service_name; service_name is orcl (you should remember this service name)

  6. After downloading instantclient_11_1 unzipped it and then pasted in your Local Disk. And copy the path C:\instantclient_11_1 and then set this path as your user variable & system variable. Note is that my code is working without setting path variable.

  7. Open your cmd and enter into SQL, create your schema following these commands

    1. sqlplus / as sysdba
    2. create user dbname identified by pass123;
    3. grant connect,resource to dbname;

    4. Create table user_info and insert data into your table and commit out. Note: you must commit your data either data is not inserted.

    5. Then this script run in your 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>';
3

1 - The first step is to identify the right instant client for your xampp or wampp or lampp installation through checking PHP details from phpinfo. Create a simple php file and add the code below and preview on your browser.

<?php 
phpinfo();
?> 

phpinfo() details

2 - Go to https://www.oracle.com/database/technologies/instant-client/downloads.html and download the right instant client (base package and sdk) for your architecture (32bit or 64bit)

Instant client package - basic

Instant client package - SDK

3 - Extract instantclient to your preferred directory and add the path to your environment variables.

4 - Go to php.ini and enable oci8 extension by removing the ; at the start of the line. Look for this line

;extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

Refactor to

extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

Environment variables

5 - Restart your PC

6 - Check your phpinfo (The page you created on step 1). You should see the details below:

OCI8

Victor Mwenda
  • 1,677
  • 17
  • 16
1

I installed Wamp & expected everything to work out of the box. Not so. I have 2 Oracle clients on my x64 Windows machine (instant and full). If anyone else has a similar setup, the trick is to make sure the instant client is (a) in your Path environment variable and (b) precedes the full client in the Path variable. There's a really brief section on Windows here but it gave the answer.

David Willis
  • 183
  • 3
  • 8
1

Alright, folks.

First, use

<?php 
phpinfo();
?> 

and determine your PHP Version (located at the very top, e.g. 7.0.xxx) and also, your PHP Version architecture: x64 or x86 and also, Thread Safe or Not THread Safe (located in the first table as "Thread Safety".) "Disabled" obviously means "Not Thread Safe".

It is absolutely critical that the following three pieces of software that you will need are:

  1. for the same major version of PHP (7.0 for 7.0.xxx)
  2. same version of Oracle as the version you are accessing (11g, 12g, etc)
  3. the same Not Thread Safe / Thread Safe version of PHP
  4. all for the same architecture.

If any of the following are for a different architecture, Not Thread Safe/Thread Safe version, PHP major version number, or database version, you'll get errors:

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

Remember: If you are connecting to an 11g Oracle instance, you need an 11g driver.

Second, install the correct PHP, OCI8 PECL Driver, and instant client.

I chose:

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

Third, modify d:\php\php.ini according the instructions given by Oracle:

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.

Fourth: Add d:\oci\ (or whatever your instant client install location is) to your system PATH.

Fifth: reboot your PC.

Sixth, on a command prompt, type "where oci*" and verify that your Instant Client install path version of oci.dll is present.

Seventh, go to d:\php\ and type "php -m" and you should see OCI8 in the list.

If you do not see OCI8 in the list of modules after typing "php -m", open up d:\php\errorlog.txt

If you see something like:

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

then either instant client or your PECL driver download is not the same architecture as your PHP version.

If you see something like:

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

then you are using the wrong OCI8 PECL driver for your version of instant client.

Hope this helps.

hype
  • 29
  • 3
0

try this

in the php.ini file uncomment this

extension_dir = "./" "remove semicolon"

mustafa-naeem
  • 37
  • 1
  • 10
0

I had the same issue, the solution on this page helped me, it's caused by using incompatible oci ddl files.

Hope it helps.

Frank
  • 1,315
  • 7
  • 24
  • 43
0
  • Download xampp and uncomment oracle 12c extension or 11c 'extension=oci8_11g' for xampp 7.2.9
  • Download instant client 32 bit and set its path
  • Download instant client 32 bit SDK package and set its path
  • Copy instant clients and SDK dll files to xamp\php\ext, xampp\php\ and xampp\appache\bin\
  • Download php-oci of same php version of tread safe x86 then copy its files to php\ext*.dll, php version is written on top of phpinfo tab of xampp admin.
  • OCI8 will appear on phpadmin page or apache admin then phpadmin tab. It means phpOCI has been installed.
סטנלי גרונן
  • 2,917
  • 23
  • 46
  • 68
  • XAMPP is now pushing 64-bit builds so you might need the 64-bit Instant client. How to tell is shown on https://blogs.oracle.com/opal/installing-xampp-for-php-and-oracle-database – Christopher Jones Mar 07 '19 at 00:03
0

Download from Instant Client for Microsoft Windows (x64) and extract the files below to "c:\oracle":

instantclient-basic-windows.x64-12.1.0.2.0.zip

instantclient-sqlplus-windows.x64-12.1.0.2.0.zip

instantclient-sdk-windows.x64-12.1.0.2.0.zip This will create the following folder "C:\Oracle\instantclient_12_1".

Finally, add the "C:\Oracle\instantclient_12_1" folder to the PATH enviroment variable, placing it on the leftmost place.

Then Restart your server.

Masre
  • 167
  • 1
  • 8