Connessione: PHP - Oracle XE

Ciao a tutti,

ho un grosso problema e non riesco a venirne a capo.Dunque:

Ho installato Oracle XE su WinXP (che utilizzo in localhost)

Ho attivato un utente attraverso l'interfaccia web di Oracle in modo da utilizzare le sue credenziali (login e password) con PHP.

Inoltre la mia installazione di Apache2/PHP5 è quella classica, attivando l'estensione oci8 tramite php.ini

Ho provato a stabilire una connessione eseguendo il seguente codice:

<?php

putenv("ORACLE_HOME=C:\Programmi\oraclexe\app\oracle\product\10.2.0");

 $conn = oci_connect('hr','prova','//localhost/XE');

  if (!$conn) {

      $e = oci_error();

      print htmlentities($e['message']);

    exit();

  }

Ecc.ecc......

?>

Ma mi da sempre il seguente errore:

"Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries in C:\www\index.php on line 19"

La line 19 è appunto quella che contiene oci_connect.

Insomma non riesco a stabilire una connessione con Oracle. Ho provato a reperire qualcosa in rete ma non ho trovato nulla di utile per risolvere il problema.

Confido in voi, un saluto.

inviato 8 anni fa
whitewolf11
X 0 X

1 -

Workaround: add the apache user to the oracle group.  This only occurs

in 5.2.1.  Previous versions of PHP which I've tried (5.0.3 and 5.1.0)

did not have this problem.  Obviously this is a security issue as the

apache user now has a lot more things it can use to wreak havoc.

Oracle version 10.2.0.1.0.  Apache version 2.0.52.

2 - Prova OCILogon invece di oci_connect

3 - Cambia i permessi alla cartella ORACLE_HOME

Altro non ti so dire!

risposto 8 anni fa
LonelyWolf
X 0 X

Per ora ho provato a sostituire oci_connect con OCILogon e dà sempre lo stesso problema ossia sempre lo stesso avviso riportato nel post precedente.

1 - Add the apache user to the oracle group.  Non ho capito esattamente cosa devo fare e come devo procedere.... (utilizzo la versione PHP 5.2.4, quindi, stando alla citazione, è presumibile che si debba modificare qualcosa...)

3 - Come faccio a cambiare i permessi per ORACLE_HOME.... ?

Grazie per l'auito.

risposto 8 anni fa
whitewolf11
modificato 8 anni fa
X 0 X

1 - se cambi i permessi lascia stare questo punto

OCILogon ha una sintassi differente, verificala perchè io non conosco oracle

3 - vai alla cartella, ci clicchi con il tasto destro -> proprietà e nei permessi lasci libero accesso a tutti.

risposto 8 anni fa
LonelyWolf
X 0 X

Ok ! Finalmente sono riuscito a stabilire una connessione con Oracle... :buck:

Ci sono arrivato per puro caso leggendo un articolo sulle funzioni OCI nel manuale online di Php.

Tutto quello che ho fatto è aggiungere le seguenti righe al file di configurazione di apache server (httpd.conf):

<Directory "C:/www">

  SetEnv ORACLE_BASE "C:/Programmi/oraclexe/app/oracle"

  SetEnv ORACLE_HOME "C:/Programmi/oraclexe/app/oracle/product/10.2.0"

  SetEnv NLS_LANG "american_america.WE8DEC"

  SetEnv NLS_CHARACTERSET "WE8DEC"

  SetEnv NLS_NCHAR_CHARACTERSET "AL16UTF16"

</Directory>

dove C:/www è la directory del webserver.

Mentre la stringa di connessione è la seguente:

$conn = oci_connect('SYSTEM','password');

Poi per quanto riguarda i permessi per la cartella Oracle_HOME ho lasciato libero accesso a tutti.

Inoltre nello script php non è specificato nessun putenv.

Fin qui tutto bene.

Invece ho riscontrato i seguenti problemi:

1) Come avete notato ho utilizzaro l'account amministratore di Oracle. Infatti se provo ad utilizzare le credenziali di un qualsiasi altro utente creato mi dà il seguente errore:

$conn = oci_connect('hr','password');

ORA-00942: tabella o vista inesistente  ???

2) Nella stringa di connessione se provo a specificare il nome del database mi da il seguente problema:

$conn = oci_connect('SYSTEM','password','//localhost/XE');

ORA-12541: TNS: nessun listener    ???

risposto 8 anni fa
whitewolf11
X 0 X

hai abilitato gli account utente dalla console di Oracle XE (quella web)?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Al punto 1):

Come uno sciocco avevo dimenticato di creare la tabella per l'utente creato....Ogni utente ha le sue tabelle ecc.

Rimane solo il punto (2).

Il particolare il parametro '//localhost/XE' .....  (tra l'altro la versione Oracle XE offre un unico database predefinito, non è possibile crearne altri) ma qual'è esattamente il parametro da impostare? Il nome del database è XE.

Comunque stando alla documentazione di php, tale parametro può essere omesso secondo i seguenti criteri:

db:

This optional parameter can either contain the name of the local Oracle instance or the name of the entry in tnsnames.ora.

If the not specified, PHP uses environment variables ORACLE_SID and TWO_TASK to determine the name of local Oracle instance and location of tnsnames.ora accordingly.

risposto 8 anni fa
whitewolf11
X 0 X

Ciao,

premetto che anche io mi sono imbattuto nella divertente gestioni delle connessioni Oracle e posso dirti che visto  che il DB è unico nella versione XE puoi semplicemente scrivere questo:

$conn = oci_connect('SYSTEM','password','');

e tutto dovrebbe funzionare.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda