php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #38365 php 5.x using OCILobRead2 which only avalibe in 10g oci.dll
Submitted: 2006-08-07 12:43 UTC Modified: 2006-08-08 06:23 UTC
From: azsd at qq dot com Assigned:
Status: Closed Package: OCI8 related
PHP Version: 5.1.4 OS: windows 2003
Private report: No CVE-ID: None
 [2006-08-07 12:43 UTC] azsd at qq dot com
Description:
------------
php_oci8.dll in php 5 using an function OCILobRead2 that incompatible with 9i and 8i.

I searched out bug #37287 but It's only a workround.

I think drop an 10g version oci.dll somewhere on a web server with oracle 9i database server installed should make other application fall into version conflict.

the OCILobWrite and others Lob Function is either none "2" version, so I can assurance its a bug.

I try to midify the code of php_oci8 but my vc 7.1 produced an crashed (memory access violate) php5ts.dll and php_oci8.dll.

I have used a Q&D fix (edited the import table using LordPE) for this problem now, but through the callback function of OCILobRead2 and OCILobRead have differnt argument,I hope it can fix from source offically.

Reproduce code:
---------------
<?php
phpinfo()
?>

and set 
display_startup_errors = On

Expected result:
----------------
a table entry
OCI8 Support  enabled  
be displayed

Actual result:
--------------
Unable to load dynamic library "D:/PHP/ext/php_oci8.dll"

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-08-07 12:56 UTC] tony2001@php.net
Yes, that's why the docs say: "Windows users will need libraries with version at least 10 to use the php_oci8.dll."

We had to choose from two options: 
1) limit Win32 users to Oracle 8 functionality (which was used to build oci8 previously);
2) require them to download & install additional 30-35Mb of Oracle Instant Client.
The latter seems to be the best solution.
Of course, it is also possible to build php_oci8.dll against Oracle 9 client, but since its installation comes with the server itself (3 CDs x 700Mb), this option was rejected.

This requirement affects only Win32 users because they use precompiled php_oci8.dll, while on other systems oci8.so can be built against any version of Oracle Client.
 [2006-08-07 13:19 UTC] azsd at qq dot com
I can't determine an oracle 9i server with two versions client will make what kind behavor of other applications.

If I add the instant client at end of path, php will still using 9i oci.dll, but if I added it in path beyond of 9i bin dirctionay,i found other applications will using some 9i dll and 10g dll both.and I don't know is the server it self using some undocument api that only avalible in 9i.

Is there some option make php search dll in  without affect system environment?

It's not possible to get anthor box runing webserver because my boss will not agree

I can not understand if its break to oci10 first and then doc suggest people using 10g client and why the 4.x php_oci8.dll using OCILobRead working fine with 8i and 9i,
if there is planed why only 1 of 66 api incomplible to 9i.
 [2006-08-07 13:25 UTC] tony2001@php.net
Please ask further questions somewhere else, this is not a bug and I already explained why.
 [2006-08-07 14:01 UTC] azsd at qq dot com
Okay I know they are feathers...
I will shutup and goto my home then try to using LoadLibrary workaround instead depend on peloader for 10g dll.
 [2006-08-08 06:23 UTC] azsd at qq dot com
I checked that oci.dll havn't depend on other oracle dlls,
related windows pe Loader using host process work dir first than path environment, I droped 10g oci.dll into IIS' inetsrv folder and its only using by web server now.

yes Its quick n clean,because inetsrv folder havn't added in to path, I have checked other system services and applications still using client in oracle server installion.

the better modification is using LoadLibrary instead import library, it will offer more same behavor like oci.so.

at last because I have to margin lots of codes for 5 and I had send in my jacket some days ago, I decide stick the server's php to 4.x

because cheap and crasp servers have abroad using in lots of province of my country,
I added this comment for peoples who have server only able to runing 9i and place webservers,databaseserver, applications,etc all in one Pentium3 box.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed Apr 24 06:01:29 2024 UTC