planitecx
Goto Top

PHP Fatal error: Uncaught Error: Call to undefined function oci connect

Hallo Zusammen,

ich sitze seit Tagen am Problem das ich keine PHP Anwendung mit Anbindung zu Oracle zum laufen bekomme.
Bekomme folgenden Fehlermeldung:

PHP Fatal error:  Uncaught Error: Call to undefined function oci_connect() [pfad]
Stack trace:
#0 {main}
  thrown in [pfad]

<?php
$conn = oci_connect('User', 'Pass', 'Service_Name');  
if ($conn) {
    echo "Connected to Oracle.";  
    oci_close($conn);
}
 
if (!$conn) {
    echo "Not connected to Oracle.";  
}
 
?>

System:
Win 2012R2
IIS 8.5
PHP 7.3.1
Oracle 11.2 (x86) 32Bit

*Ich habe meine IIS insoweit konfiguriert das ich über Rollen und Features CGI hinzugeügt habe.

*Die PHP.ini wurde
extension=php_oci8.dll
hinzugefügt.

*Entsprechende *.dll Datein liegen auch in dem ext Verzeichnis.

*Umgebungsvariablen
Path C:\instantclient_11_2

*Phpinfo kann ich aufrufen!

Habe leider keine passende Lösung gefunden bin wohl nicht der einzige der diesen Fehler hat.
Wäre schön wenn mir einer von euch behilflich seien könnte.

UPDATE
System:
Win 2012R2 (Umgebungsvariable [path:C:\oracle\product\11.2.0\client_1\bin;])
Microsoft Visual C++ 2017 Redistributable
IIS 8.5 (CGI)
PHP 7.3.1
Oracle 11.2 (x86) 32Bit
Oracle Database Express Edition x86
php_oci8 in PHP.ini aktivieren

Content-ID: 419777

Url: https://administrator.de/contentid/419777

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

138810
138810 20.02.2019 aktualisiert um 15:23:19 Uhr
Goto Top
Welchen Oracle Client hast du installiert? 32 oder 64bit? Wenn 64bit dann schmeiß den runter und installiere die 32bit Version.
PlanitecX
PlanitecX 20.02.2019 um 15:23:51 Uhr
Goto Top
Hi freesolo,

habe den 32Bit installiert.
138810
138810 20.02.2019 aktualisiert um 15:26:31 Uhr
Goto Top
Lese hier alle Kommentare vor allem auch das mit der PATH:
https://stackoverflow.com/questions/22478387/call-to-undefined-function- ...
PlanitecX
PlanitecX 20.02.2019 um 15:26:24 Uhr
Goto Top
Danke für den Link Stackoverflow ist meistens meine erste Anlaufstelle.
Und bin dort alle sachen schon durch.
borstenwurm
borstenwurm 20.02.2019 um 15:26:50 Uhr
Goto Top
Zitat von @PlanitecX:

$conn = oci_connect('User', 'Pass', ''Service_Name');

Bin kein PHP Experte, aber macht das was dass du vor Service_Name Gänsefüßchen verwendest und keinen Apostroph?

Abgesehen davon sagt die PHP Doku zu oci_connect(): "Returns a connection identifier or FALSE on error. " Dein "if ($conn)" dürfte also eigentlich auch so nicht funktionieren.
138810
138810 20.02.2019 aktualisiert um 15:27:44 Uhr
Goto Top
Dann schreib das doch bitte auch, was du alles schon gemacht hast, sonst reden wir uns hier den Muund fusselig. PATH und Pfade beachtet?
PlanitecX
PlanitecX 20.02.2019 aktualisiert um 15:35:48 Uhr
Goto Top
Zitat von @138810:

Dann schreib das doch bitte auch, was du alles schon gemacht hast, sonst reden wir uns hier den Muund fusselig. PATH und Pfade beachtet?


Also ich bin wie schon erwähnt zig Seiten durch gegangen. Alles Seite und Versuche hier aufzulisten würde den Rahmen denke ich sprengen.

Path wurde unter Umgebungs Variablen eingetragen.
Was meinst du mit Pfaden?
PlanitecX
PlanitecX 20.02.2019 um 15:34:51 Uhr
Goto Top
Zitat von @borstenwurm:

Zitat von @PlanitecX:

$conn = oci_connect('User', 'Pass', ''Service_Name');

Bin kein PHP Experte, aber macht das was dass du vor Service_Name Gänsefüßchen verwendest und keinen Apostroph?

Abgesehen davon sagt die PHP Doku zu oci_connect(): "Returns a connection identifier or FALSE on error. " Dein "if ($conn)" dürfte also eigentlich auch so nicht funktionieren.

Hallo borstenwurm,

stimmt das gänsefüßchen kommt nicht dahin ist mir beim entfernen der korrekten Daten wohl passiert.
Wenn ich die abfrage weglassen bekomme ich die Connection ja trotzdem nicht hin.
TripleDouble
TripleDouble 20.02.2019 um 16:09:56 Uhr
Goto Top
Hallo,

den Web-Server hast Du nach Änderung der PHP.INI neu gestartet?

Gruß - TD
PlanitecX
PlanitecX 20.02.2019 um 16:21:13 Uhr
Goto Top
Zitat von @TripleDouble:

Hallo,

den Web-Server hast Du nach Änderung der PHP.INI neu gestartet?

Gruß - TD

Hallo TripleDouble

ja das habe ich schon getan.
PlanitecX
PlanitecX 20.02.2019 um 16:25:24 Uhr
Goto Top
Zitat von @138810:

Dann schreib das doch bitte auch, was du alles schon gemacht hast, sonst reden wir uns hier den Muund fusselig. PATH und Pfade beachtet?

Update
In der PHP Info steht unter PHP Values folgendes passt an dieser stelle etwas nicht?
Oder was kann ich anhand er phpinfo noch überprüfen um auf den Fehler zu kommen.
$_SERVER['Path']  

C:\Oracle\product\11.2.0\client_2\bin;C:\Oracle\product\11.2.0\client_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn
bloodstix
bloodstix 20.02.2019 um 16:29:12 Uhr
Goto Top
@borstenwurm doch das funktioniert, denn auch ein "connection identifier" zählt dann als "true".

@PlanitecX zeigt phpinfo denn, das die extension geladen wurde`?
TripleDouble
TripleDouble 20.02.2019 um 16:33:55 Uhr
Goto Top
Du kannst zum Beispiel prüfen

- ob die richtige PHP.INI genutzt wird (Loaded Configuration File)
- ob das Oracle-Modul geladen wird (es sollte bei php_info() in eigener Sektion mit aufgelistet werden)

TD
PlanitecX
PlanitecX 20.02.2019 um 16:42:00 Uhr
Goto Top
@bloodstix worunter sehe ich das denn?
oci finde ich nur unter Configure Command und Author.
PlanitecX
PlanitecX 20.02.2019 um 16:45:49 Uhr
Goto Top
@TripleDouble

- Der Pfad zur geladen php.ini ist korrekt.

- Das Oracle Modul hat keine eigene Sektion.
TripleDouble
TripleDouble 20.02.2019 um 16:51:27 Uhr
Goto Top
Das Modul sollte aber eine Sektion haben.

(siehe https://www.oracle.com/technetwork/articles/dsl/technote-php-instant-084 ..)

screenshot
godlie
godlie 20.02.2019 um 16:54:52 Uhr
Goto Top
Hast du mal in deine logs geschaut?

%SystemDrive%\inetpub\logs\LogFiles

Oder es taucht etwas im EventLog auftauchen einfach das Loging von PHP umbiegen in der php.ini

log_errors = on
error_log = syslog

Du kannst bei error_log auch eine Pfad angeben wohin die errors gelogged werden sollen
PlanitecX
PlanitecX 20.02.2019 aktualisiert um 17:26:19 Uhr
Goto Top
Hallo godlie,

In den LogFiles steht nur:

2019-02-20 16:13:25 10.18.105.111 GET /ProjektName/contest.php - 80 - 10.18.105.111 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/72.0.3626.109+Safari/537.36 - 500 0 0 3

habe es in der php.ini umgestellt aber die error.log datei wird dann nicht gefüllt, Konfus.
PlanitecX
PlanitecX 20.02.2019 um 17:21:50 Uhr
Goto Top
@TripleDouble

ich kann es mir leider auch nicht erklären warum ich keine Section für Oracle habe.
Es taucht nur unter der Kategorie Author auf.
TripleDouble
TripleDouble 21.02.2019 um 09:17:43 Uhr
Goto Top
Lass Dir mal mit
var_dump(get_loaded_extensions ());

die geladenen Module ausgeben. Falls da Oracle nicht auftaucht, müsstest Du Dich mit Installation / Konfiguration / Troubleshooting des Moduls bzw. Web-Servers auseinandersetzen. Das kann viele Ursachen haben, die man per Ferndiagnose nicht heilen kann.

TD
PlanitecX
PlanitecX 21.02.2019 aktualisiert um 10:38:07 Uhr
Goto Top
@TripleDouble

Danke du hattest recht das Modul war nicht geladen.
habe nun Oracle Database Express Edition x86 installiert und wieder deinstalliert.
Und bekomme zumindest mit
var_dump(get_loaded_extensions ());
oci8 angezeigt.

Jetzt habe ich einen anderen Fehler habe schon die
sqlnet.ora und tnsname.ora sind im entsprechenden Verzeichnis.

PHP Warning: oci_connect(): ORA-12541: TNS: Kein Listener in C:\inetpub\wwwroot\Projekt\index.php on line 2
$connect = oci_connect('User', 'Pass', 'DB');  
PHP Warning: oci_connect(): ORA-12560: TNS: Fehler bei Protokolladapter in C:\inetpub\wwwroot\Projekt\index.php on line 4
$result = oci_connect($connect, $query);
PHP Warning: oci_fetch_array() expects parameter 1 to be resource, bool given in C:\inetpub\wwwroot\Projekt\index.php on line 42
while($row = oci_fetch_array($result))
PlanitecX
PlanitecX 21.02.2019 um 13:10:10 Uhr
Goto Top
@all

Danke nochmal an alle es funktioniert nun.
Nach der Installation von Oracle Database Express Edition x86 und deinstallieren.

Lag es am ende nur noch an dem PHP Script der nun wie folgt aussieht.

//Connection
$connect = oci_connect('User', 'Passwort', 'DB');  
if (!$connect) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);  
}

//Query
$result = oci_parse($connect, 'SELECT * FROM Tabelle');  
if (!$result) {
    $e = oci_error($connect);
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);  
}

// Perform the logic of the query
$r = oci_execute($result);
if (!$r) {
    $e = oci_error($result);
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);  
}