Apel la funcția nedefinită oci_connect() (Programare, Php, Oracle)

user3153806 a intrebat.

Am primit această eroare.

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

acesta este codul.

Aceasta este eroarea pe care am primit-o.

Fatal error: Call to undefined function oci_connect() in C:xampphtdocsorgorgphpmyphp.php on line 51

Am verificat fișierele PHP DLL din folderul ext.

Cineva să mă ajute cu această problemă mulțumesc anticipat.

Comentarii

12 răspunsuri
Soichiro Cub

Tocmai am petrecut TREI ZILE întregi luptând împotriva acestei probleme.

Foloseam conexiunea mea ORACLE în Windows 7 și nu aveam probleme. Săptămâna trecută tocmai mi-am luat un calculator nou cu Windows 8. Instalați XAMPP 1.8.2. Fiecare aplicație PHP/MySQL de pe acest server funcționează bine. Problema a apărut când am încercat să conectez aplicațiile mele php la BD Oracle.

Apel la funcția nedefinită oci_pconnect()

Și când pornesc / opresc Apache cu modificări, un ciudat „Avertizare” pe „PHP Startup” care merge la LOG cu „PHP Warning: PHP Startup: in Unknown on line 0”.

Am făcut de toate (am decomentat php_oci8.dll și php_oci8_11g.dll, am copiat oci.dll în directorul /ext, lângă /Apache și NIMIC nu funcționează. Am descărcat toate versiunile de Instant Client și NIMIC.

Dumnezeu a venit în ajutorul meu. Când am descărcat ORACLE Instant Client 32 biți, totul funcționează bine. phpinfo() afișează informații despre oci8, iar aplicația mea funcționează bine.

Așadar, NU ȚINEȚI NICIODATĂ CA VERSIUNEA Dvs. DE WINDOWS SĂ FIE x64. Legătura sunt între XAMPP și ORACLE Instant Client.

Comentarii

  • Și eu am această problemă… Sunt pe Windows 7 pe 64 de biți și tocmai mi-am dat seama că am instalat versiunea pe 64 de biți a Oracle XE 11.2 și am instalat clientul instant pe 32 de biți… poate că asta este problema mea (Toate acestea trebuie să fie pe 32 de biți pentru a funcționa împreună?) Ce versiune de Oracle folosiți? –  > Por brims.
  • Cred că ideea este că XAMPP funcționează pe 32 de biți și, prin urmare, poate funcționa numai cu driverul Oracle pe 32 de biți. Clientul Oracle pe 32 de biți este suficient de inteligent pentru a putea vorbi cu versiunea de server pe 64 de biți. Dar XAMPP-32 nu este suficient de inteligent pentru a lucra cu driverul de client Oracle pe 64 de biți. –  > Por cartbeforehorse.
  • Sunteți eroul meu în acest moment, am descărcat și eu versiunea pe 64 de biți și am încercat să rezolv această problemă toată noaptea! Folosesc Windows 10, problema încă există. –  > Por Gordnfreeman.
Elijah Keya

Pași simpli

Trebuie să activați extensia de mai jos în fișierul php.ini

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

eliminând „;”, astfel încât rezultatele să fie cele de mai jos:

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

Descărcați Oracle Instant Client: – De preferință 32 de biți. 32 de biți va funcționa și pe 64 de biți. Puteți căuta pe Google: download oracle instant client windows 32 bit. Utilizați versiunea 11 a clientului deoarece extension=php_oci8_11.g.dll nu va funcționa cu 12. Descompuneți pachetul într-o locație precum C:Oracleinstantclient_11_2.

În cele din urmă modificați System’s PATH cu locația finală, la variabilele de sistem, nu la variabilele de utilizator.

Apoi trebuie să reporniți sistemul pentru PATH pentru ca modificările să se propage complet.

Dacă doar reporniți XAMPP/WAMP fără a reporni mașina, fișierele DLL ale clientului (de exemplu, OCL.dll) nu vor fi încărcate (și nici găsite) de către PHP. php_oci8_11g.dll extensie.

Comentarii

  • Ați vrut să eliminați unul (sau ambele) punct și virgulă din exemplul dumneavoastră ? –  > Por Jonathan Bergeron.
  • Nu cred că puteți alege o arhitectură arbitrară pentru Instant Client. Sunt destul de sigur că trebuie să se potrivească cu arhitectura PHP. –  > Por Álvaro González.
Ron

Lucruri de care trebuie să vă asigurați

  1. Ori de câte ori vă conectați la baza de date Oracle, încercați să utilizați biblioteci client Oracle de 32 de biți, deoarece XAMP PHP este compilat cu 32 de biți (deși aveți o mașină Windows de 64 de biți).
  2. Descărcați Oracle Client de la Descărcați de aici

  3. Lipiți-l în C:instantclient_12_1

  4. Apoi setați calea de mai sus în variabila de mediu de sistem
  5. Apoi mergeți la C:xamppphpphp.ini și descompuneți extension=php_oci8_12c.dll
  6. Apoi reporniți XAMP și ar trebui să funcționeze fără probleme.

John Conde

Trebuie să activați această extensie în fișierul php.ini. Consultați Instalarea Oracle:

extension=oci8.so

Comentarii

  • De asemenea, puteți construi php cu --with-oci8 –  > Por Nathan.
  • Sufixul „so” este pentru Solaris. –  > Por sebagiar.
  • @sebagiar are dreptate. Acest lucru nu are nimic de-a face cu configurația Windows. În Windows, extensia corectă este DLL. –  > Por cartbeforehorse.
ADT

Am instalat WAMPServer 2.5 (pe 32 de biți) și am întâlnit, de asemenea, o eroare oci_connect. De asemenea, aveam instalat și clientul Oracle 11g (32 de biți). Soluția comună pe care am citit-o în alte mesaje a fost să modificați fișierul php.ini din directorul C:wampbinphpphp5.5.12, însă acest lucru nu a funcționat niciodată pentru mine. Poate că am înțeles greșit, dar am descoperit că dacă modificați fișierul php.ini din directorul C:wampbinapacheapache2.4.9, veți obține rezultatele dorite. Singurul lucru pe care l-am modificat în fișierul apache php.ini a fost eliminarea punct și virgulă la extension=php_oci8_11g.dll pentru a o activa. Apoi am repornit toate serviciile și acum funcționează! Sper că acest lucru funcționează pentru tine.

hype

În regulă, oameni buni.

Primulutilizați

<?php 
phpinfo();
?> 

și determinați versiunea PHP (aflată în partea de sus, de exemplu 7.0.xxx)și, de asemenea, arhitectura versiunii PHP: x64 sau x86și, de asemenea, Thread Safe sau Not THread Safe (aflată în primul tabel ca „Thread Safety”.) „Dezactivat” înseamnă, evident, „Not Thread Safe”.

Este absolut esențial ca următoarele trei programe de care veți avea nevoie să fie următoarele trei elemente de software:

  1. pentru aceeași versiune majoră de PHP (7.0 pentru 7.0.xxx).
  2. aceeași versiune de Oracle ca și versiunea pe care o accesați (11g, 12g, etc.)
  3. aceeași versiune Not Thread Safe / Thread Safe a PHP
  4. toate pentru aceeași arhitectură.

Dacă oricare dintre următoarele sunt pentru o arhitectură, versiune Not Thread Safe / Thread Safe, număr de versiune majoră PHP sau versiune de bază de date diferite, veți primi erori:

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

Rețineți: Dacă vă conectați la o instanță Oracle 11g, aveți nevoie de un driver 11g.

Al doilea, instalați PHP-ul corect, driverul PECL OCI8 și clientul instantaneu.

Eu am ales:

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

Al treilea, modificați d:phpphp.ini în conformitate cu instrucțiunile date de 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.

În al patrulea rând: Adăugați d:oci (sau oricare ar fi locația de instalare a clientului instantaneu) la PATH-ul sistemului.

Al cincilea:: reporniți PC-ul.

Al șaselea:, pe un prompt de comandă, tastați „where oci*” și verificați dacă versiunea de oci.dll din calea de instalare a clientului dvs. instant este prezentă.

Al șaptelea:, mergeți la d:php și tastați „php -m” și ar trebui să vedeți OCI8 în listă.

Dacă nu vedeți OCI8 în lista de module după ce ați tastat „php -m”, deschideți d:phperrorlog.txt

Dacă vedeți ceva de genul:

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

atunci fie clientul instantaneu, fie driverul PECL descărcat nu are aceeași arhitectură cu versiunea PHP.

Dacă vedeți ceva de genul::

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

atunci folosiți un driver PECL OCI8 greșit pentru versiunea dumneavoastră de client instant.

Sperăm că acest lucru vă ajută.

David Willis

Am instalat Wamp & mă așteptam ca totul să funcționeze din start. Nu este așa. am 2 clienți Oracle pe mașina mea Windows x64 (instant și complet). Dacă altcineva are o configurație similară, trucul este să vă asigurați că clientul instant este (a) în variabila de mediu Path și (b) precede clientul complet în variabila Path. Există o secțiune foarte scurtă despre Windows aici dar a oferit răspunsul.

Abdul Kayum Khan
  1. Verificați versiunea php -version ca și cum ar fi PHP 5.6.32 (cli) (construit: 25 octombrie 2017 16:02:15).
  2. Utilizarea extensiei OCI8 pentru a accesa baza de date Oracle. Deci, descărcați php_oci8.dll de la 1https://pecl.php.net/package/oci8/2.0.8/windows. (5.6 Thread Safe (TS) x86 ) php_oci8.dll trebuie să fie aceeași versiune cu versiunea dvs. de php.Apoi descompactați-l și veți găsi 1.php_oci8.dll 2.php_oci8_11g.dll (în funcție de versiunea dvs. de oralce) aceste două fișiere lipite în fișierul dvs.
    (xamppphpext).

  3. Deschideți fișierul php.ini și adăugați următoarele extension=php_oci8.dll extension=php_oci8_11g.dll

  4. Verificați versiunea oracle și numele serviciului folosind aceste comenzi

    1. Deschideți cmd
    2. sqlplus / as sysdba
    3. select * from v$version;Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production, versiunea noastră oracle este 11g, deci putem folosi instantclient_11_1 (Instant Client 32-bit) descărcări de la https://www.oracle.com/technetwork/topics/winsoft-085727.html
  5. show parameter service_name;service_name este orcl (ar trebui să rețineți acest nume de serviciu)

  6. După ce ați descărcat instantclient_11_1, descompactați-l și apoi lipiți-l în discul local. Și copiați calea C:instantclient_11_1 și apoi setați această cale ca variabilă de utilizator & variabilă de sistem. Rețineți că codul meu funcționează fără a seta variabila de cale.

  7. Deschideți cmd-ul și intrați în SQL, creați schema dvs. urmând aceste comenzi

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

    4. Creați tabelul user_info și inserați datele în tabelul dvs. și faceți commit out. notă: trebuie să faceți commit pentru datele dvs. fie că datele nu sunt inserate.

    5. Apoi, acest script se execută în htdocs

mustafa-naeem

încercați acest lucru

în fișierul php.ini, adăugați următorul lucru

extension_dir = "./" „remove semicolon”

Frank

Am avut aceeași problemă, soluția de pe această pagină m-a ajutat, este cauzată de folosirea unor fișiere ddl oci incompatibile.

Sper că vă ajută.

user1116151534
  • Descărcați xampp și decomentați extensia oracle 12c sau 11c ‘extension=oci8_11g’ pentru xampp 7.2.9
  • Descărcați instant client 32 bit și setați calea acestuia
  • Descărcați pachetul Instant Client 32 bit SDK și setați calea acestuia.
  • Copiați fișierele instant client și SDK dll în xampphpext, xamppphp și xamppappachebin.
  • Descărcați php-oci cu aceeași versiune de php din tread safe x86, apoi copiați fișierele sale în phpext*.dll, versiunea de php este scrisă în partea de sus a filei phpinfo din xampp admin.
  • OCI8 va apărea pe pagina phpadmin sau apache admin apoi în fila phpadmin. Aceasta înseamnă că phpOCI a fost instalat.

Comentarii

  • XAMPP împinge acum versiuni pe 64 de biți, așa că s-ar putea să aveți nevoie de clientul Instant pe 64 de biți. Cum să vă dați seama este afișat pe blogs.oracle.com/opal/… –  > Por Christopher Jones.
Masre

Descărcați din Instant Client pentru Microsoft Windows (x64) și extrageți fișierele de mai jos în „c:oracle”:

instantclient-basic-windows.x64-12.1.0.2.0.0.zip

instantclient-sqlplus-windows.x64-12.1.0.2.0.0.zip

instantclient-sdk-windows.x64-12.1.0.2.0.0.zipAceasta va crea următorul folder „C:Oracleinstantclient_12_1”.

În cele din urmă, adăugați folderul „C:Oracleinstantclient_12_1” la variabila de mediu PATH, plasându-l pe locul cel mai din stânga.

Apoi, reporniți serverul.

Tags:,