php_oci8_11g.dll is not a valid Win32 application

manix picture manix · Aug 2, 2016 · Viewed 10.2k times · Source

This topic has been asked several times, but every solution is not working in my machine.

I am trying to connect windows 7 with a 10G oracle dabatase, but the oci extension is not loaded. Here some facts:

C:\php>php -m

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

C:\php>php -v

PHP 5.6.19 (cli) (built: Mar  2 2016 20:09:42)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
  • 64x architecture
  • TS VC11

C:\>tnsping localdb

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-AUG-2
016 22:37:50

Troubleshooting

  • I am using oci8 2.0.11. Dropped them in ext/ folded. The rest of extesions are loaded pretty good.
  • PATH variable contains the ORACLE_HOME and php path
  • Just looked up for required oracle dll files and they are there:

    C:\>where oci*

    C:\oracle\product\10.2.0\db_2\BIN\oci.dll
    C:\oracle\product\10.2.0\db_2\BIN\ocijdbc10.dll
    C:\oracle\product\10.2.0\db_2\BIN\ociw32.dll
    
  • Oracle Client is not required in my side because the database is installed in the same machine, and it install all the required libraries

What other thing am I missing? Thank you in advance

Answer

manix picture manix · Nov 4, 2016

After months I found the solution. Consider the following infrastructure:

  • Windows Server 2012 R2 Standard Edition x64
  • Apache/2.4.18 (Win64) VC11
  • PHP 5.6.19 x86 VC11 TS

Take close attention when downloading Oracle Instant Client:

  • No matter if your server is x64 or x86 arquitecture, you must download it for 32-bits
  • As you note, PHP is compiled in VC11, so you must download OIC with VC11 sources, this can be confirmed unzipping the downloaded file and check if a folder vc11 is there.

Both details are very important. Once I meet both requirements the error has gone I now I am able to connect to Oracle via PHP successfully