[PHP] Oracle8 + Apache Win32 Probleem.

Pagina: 1
Acties:

  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 31-08 20:42
Het schijnt een veel voorkomend probleem te zijn , maar ik kan maar geen goede oplossing vinden :'( . Ik hoop dat iemand hier een helder idee heeft om mijn op weg te helpen.

De onderstaande configuratie geeft het probleem :

Win32 Desktop met Apache/1.3.24 (Win32) PHP/4.2.0

Ik wil naar een oracle database (op een andere server V8.1.6) dus in de PHP.ini uncomment ik de volgende opties :
code:
1
2
extension=php_oci8.dll
extension=php_oracle.dll

Wat volgens de documentatie ook nodig is , is de Apache Enviroment aan te passen zodat alles wat nodig is te vinden is :
code:
1
2
SERVER["ORACLE_HOME=c:/apl/oracle"]   
_SERVER["ORACLE_SID=OVSD"]

En wat ook nodig is (wat volgens de meeste het probleem is)
is het naar Unix formaat converteren van de TNSNAMES.ORA en de SQLNET.ORA

Nou heb ik dit allemaal gedaan ... en ik krijg deze foutmelding bij het starten van de server :
apache.exe - Entry Point Not Found
The procedure entry point OCILobFree Temporay could not be located in the dynamic link library OCI.dll
Vervolgens :
Warning
Unable to load dynamic library 'd:\utils\php\extensions\php_oci8.dll' - The specific procedure could not be found.
De file php_oci8.dll evenals de oracle.dll is gewoon aanwezig in de directory op de juiste plaats.

Als ik alleen Oracle.dll inlaad gaat het goed. Bij beide , of alleen de oci8.dll krijg ik dus deze melding.


Dit is dus een bekend probleem (ik kom hem vaker tegen in de nieuwsgroepen).. maar de oplossingen die geboden worden werken niet. Dus probeer ik het hier nog even.

Alvast bedankt voor het lezen.

Oja , kleine toevoeging :

Bij het aanroepen van de functies in de DLL :
You must have installed PHP 4 with --with-oci8 support!

  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 31-08 20:42
Ik heb hier nog iets gevonden..
Problem is that OCI.DLL from 8.0.5 , 8.1.6 and 8.1.7 Oracle client can't process OCILobopen , OCILobclose and so on functions , that php_oci8.dll from PHP build 4.0.6 and later needs . I tried 9.0.1 client , there are in OCI.DLL this functions implemented , but now was problem to connect to the database . Do this time I not resolved this problem .
Laat ik nu client v8.05 hebben :(

Ik vraag me uit of iemand zoiets überhaubt aan de praat heeft gekregen ooit? .. Hellup :'(

Moet ik upgraden? (wat ik niet zo handig zou vinden in verband met andere applicaties die die client gebruiken)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Alleen de dll's van een nieuwere versie gebruiken gaat iig. niet werken.
Waarschijnlijk moet je je db upgraden.

Who is John Galt?


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 31-08 20:42
Op maandag 01 juli 2002 16:52 schreef justmental het volgende:
Alleen de dll's van een nieuwere versie gebruiken gaat iig. niet werken.
Waarschijnlijk moet je je db upgraden.
Uhm , gezien de investering die gedaan is aan de server + licenties vrees ik dat dit een zo goed als onmogelijke opdracht is :'( .. zijn er echt geen alternatieven?

Ik kan me niet voorstellen dat Oracle 8.x op geen enkele manier met Php 4.x kan samen werken.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 01 juli 2002 16:59 schreef om3ega het volgende:

[..]

Uhm , gezien de investering die gedaan is aan de server + licenties vrees ik dat dit een zo goed als onmogelijke opdracht is :'( .. zijn er echt geen alternatieven?

Ik kan me niet voorstellen dat Oracle 8.x op geen enkele manier met Php 4.x kan samen werken.
Bij een Oracle db koop je normaal gesproken ook de optie erbij voor gratis upgraden :?
Als je support erop hebt dan kun je sowieso gratis upgraden.
Buiten de inspanning van het upgraden zelf uiteraard

Who is John Galt?


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 31-08 20:42
Op maandag 01 juli 2002 19:06 schreef justmental het volgende:

[..]

Bij een Oracle db koop je normaal gesproken ook de optie erbij voor gratis upgraden :?
Als je support erop hebt dan kun je sowieso gratis upgraden.
Buiten de inspanning van het upgraden zelf uiteraard
Ook als je een versie hoger wilt? van 8.x naar 9.x ? .. Upgraden is helaas geen optie. Het is een bedrijfs server waar nog andere bedrijfs critische applicaties op draaien. Het zou te veel inpact hebben om te upgraden alleen omdat php er dan wel mee zou kunnen samenwerken.

Als dit de enige oplossing voor het probleem zou zijn vrees ik dat ik zelf een alternatief moet zoeken. Misschien ASP?.

Ik vind het nog steeds heel moeilijk te geloven dat die 2 applicaties niet met elkaar zouden kunnen praten en ik ga een contact op nemen met Oracle om te kijken of hun een idee hebben.

Dat dit probleem vrij algemeen is blijkt wel als je zoekt op OCI8.DLL en PHP in google.

  • TheMrH
  • Registratie: April 2000
  • Laatst online: 27-08 20:29
Op m'n werk gebruiken we ook Oracle (OCI8) ism PHP 4. Al vanaf PHP versie 4.0.4, en nu 4.2.1. Draait in principe prima, alleen vermoed ik dat de multithreading van Oracle niet goed samenwerkt met de PHP module. Krijgen nl veel te vaak een error van Windows (2000 overigens): 'Apache.exe caused an error ... and will be shutdown'. In de DrWatson log kan je dan zien dat php, of eigenlijk de Zend engine deze fout veroorzaakt. Oplossing/workaround: php als CGI draaien :(

De Oracle versies weet ik niet uit m'n hoofd, kan ik morgen ff nakijken. Volgens mij gebruiken we 8.1.7.

Verder gebuiken we geen specifieke enviroment settings vanuit php, hebben we de TNSNAMES and SQLNET ook niet naar unix formaat omgezet, dit zou Oracle voor je moeten doen als dat nodig is. De PHP versie is gewoon degenen die je van php.net kan downloaden. Tevens hoef je maar een van de 2 modules te laden, je gebruikt waarsch alleen de oci8_* functies?

Ik vemoed dat je de Oracle client moet upgraden naar minimaal 8.1.6.

The box said 'requires Windows 95 or better', so I installed Linux...


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 01 juli 2002 14:35 schreef om3ega het volgende:
Ik wil naar een oracle database (op een andere server V8.1.6)
Dit valt me net pas op :o
Heb je wel Net8 geinstalleerd op de client machine?

Who is John Galt?


  • TheMrH
  • Registratie: April 2000
  • Laatst online: 27-08 20:29
Dat heeft er weinig mee te maken denk ik. Hij krijgt bij het laden van de dll al foutmeldingen. Niet bij het connecten.

The box said 'requires Windows 95 or better', so I installed Linux...


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 31-08 20:42
Op maandag 01 juli 2002 21:16 schreef justmental het volgende:

[..]

Dit valt me net pas op :o
Heb je wel Net8 geinstalleerd op de client machine?
De Oracle client is geinstaleerd , ik had trouwens in de enviroment settings niet naar de BIN verwezen (waar de OCI.DLL instaat) dus hoopvol veranderde ik dat nog , maar nog steeds hetzelfde resultaat.

Ik ben erg benieuwd naar het antwoord op de versies van TheMrH.

  • TheMrH
  • Registratie: April 2000
  • Laatst online: 27-08 20:29
De versies:

Windows 2000 SP2
PHP 4.2.1
Apache 1.3.24
Oracle 8.1.7.0.0 Standard Server
Oracle 8.1.7.0.0 Client

Dit draait allemaal op dezelfde PC, maar werkt ook naar een andere DB toe.

The box said 'requires Windows 95 or better', so I installed Linux...


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 31-08 20:42
Ik heb het draaiend!

Zonder OCI8.DLL .. maar met alleen de ORACLE.dll..
PHP:
1
<?$handle = ora_plogon("sql_connect@ovsd", "secret")or die;$cursor = ora_open($handle);ora_commitoff($handle);$query = "SELECT * FROM ALL_ALL_TABLES";ora_parse($cursor, $query) or die;ora_exec($cursor);echo "<HTML><PRE>\n";echo "$query\n\n";$numcols = 0;while(ora_fetch($cursor)){    $numcols = ora_numcols($cursor);    for($column=0; $column < $numcols; $column++){        $data = trim(ora_getcolumn($cursor, $column));        if($data =="") $data = "NULL";        echo"$data\t";    }    echo "\n";}$numrows = ora_numrows($cursor);echo "\nROWS RETURNED: $numrows\n";echo "</PRE></HTML>\n";ora_close($cursor);?>

En ik krijg netjes alle tabel namen terug. Geen client geupgrade en ook geen DB update.

Ik gebruik de oci8.dll helemaal niet eens? ..
Had ik dat maar eerder geweten :+

Iedereen toch bedankt voor de hulp!

Verwijderd

Thanx !!!

Ik keeg ook geen verbinding in met Oracle op win32, maar jouw script werkte.

In de function
int ora_plogon ( string user, string password)
is user niet de username (scott ofzo), maar username@servicename, b.v. scott@orcl.

Stom klein verschil, maar zonder de servicename krijg je een rare foutmelding: Connection Failed: ORA-12560: TNS:fout in protocoladapter. in ...

p.s. wat is nu precies het verschil tussen ora_plogon en ora_logon? Ok, het ene is persistent, maar wat doet dat precies? Blijft de verbinding open als het script beeindig wordt ofzo? (zou wel handig zijn als je sessies gebruikt en de db verbinding in de sess zet :) )
Pagina: 1