Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2007, 10h23   #1
Futur Membre du Club
 
Développeur informatique
Inscription : mars 2004
Messages : 64
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2004
Messages : 64
Points : 18
Points : 18
Envoyer un message via MSN à Devether
Par défaut Erreur _oci_open_session lors du ocilogon

Bonjour,

J'ai un problème de connexion à ma base oracle mais je ne sais pas si ça vient de php, oracle ou linux.

Mon script php fonctionne en local sous XP. Je me connecte à ma base oracle sans problème.
Sur le serveur linux, j'ai deux comportements differents selon que je lance mon script en lignes de commandes (...]# php mon script.php) ou que je l'appel dans une page de mon site construit avec typo3.

Sur mon site web il n'y a aucun problème, seulement ce script est destiné à être executé par cron une fois par jour. Quand je l'execute en ligne de commande, au moment de la connexion à la même base oracle (je n'en ai qu'une) il m'affiche le message d'erreur suivant :
Citation:
PHP Warning: ocilogon(): _oci_open_session: OCIHandleAlloc OCI_HTYPE_SVCCTX: OCI_INVALID_HANDLE in /home/user/sources/oracle.class.php on line 33
A la ligne 33 il y a bien entendu mon ocilogon :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$username	= "XXXXX";
$password	= "YYYYYY";
$db		= "MADB";
 
$this->log_procedure("Connexion à la base ".$db);
 
if (($this->connexion = ocilogon($username, $password, $db)) === FALSE) { // ligne 33
	$this->log_procedure("Connexion impossible à ".$db);
	$this->log_error(true);
}
else {
	$this->log_procedure("Succès de connexion à la base ".$db);
}
en faisant des recherches j'ai remarqué que ce message d'erreur vient du fait que ORACLE_HOME n'est pas bien défini mais j'ai pourtant rien dans mon site web qui y fait référence et pourtant la connexion se fait bien.

Y-a-t'il une différence dans l'execution de php en ligne de commande et par apache ? Où doit pointer ORACLE_HOME ? Un autre paramètre rentre-t-il en ligne de compte ?

Merci d'avance,
Devether
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. Lao Tseu ;o)
Devether est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 12h18   #2
Futur Membre du Club
 
Développeur informatique
Inscription : mars 2004
Messages : 64
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2004
Messages : 64
Points : 18
Points : 18
Envoyer un message via MSN à Devether
J'ai fais un teste pour voir les différences en faisant un print_r($_ENV). J'ai supprimé toutes les lignes identiques en laissant le ORACLE_HOME

Sur le site web :

Code :
1
2
3
4
5
6
7
8
9
10
Array
(
    [LD_LIBRARY_PATH] => /usr/lib/oracle/10.2.0.1/client/lib
    [TNS_ADMIN] => /etc/oracle
    [PATH] => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
    [LANG] => fr_FR.UTF-8
    [SHLVL] => 2
    [_] => /sbin/initlog
    [ORACLE_HOME] => .
)
Sur le tty :

Code :
1
2
3
4
5
6
7
8
9
Array
(
    [OLDPWD] => /home/user
    [PATH] => /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/NX/bin:/root/bin
    [LANG] => fr_FR.ISO-8859-1
    [SHLVL] => 1
    [_] => /usr/bin/php
    [ORACLE_HOME] => .
)
On voit bien que le LD_LIBRARY_PATH et le TNS_ADMIN ne sont pas définis lorsque j'execute depuis le tty.
Même en ajoutant les lignes suivantes avant de faire le print_r() ça ne les ajoute pas :
Code :
1
2
putenv("TNS_ADMIN=/etc/oracle");
putenv("LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.1/client/lib");
Y-a-t'il une autre commande que putenv() pour ajouter definir ces variables??
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. Lao Tseu ;o)
Devether est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 12h07   #3
Futur Membre du Club
 
Développeur informatique
Inscription : mars 2004
Messages : 64
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2004
Messages : 64
Points : 18
Points : 18
Envoyer un message via MSN à Devether
J'ai trouvé une solution. Je vais quand même la notéee ici pour ceux qui auraient le même problème.

J'ai fais un bash pour pouvoir definir mes variables d'environnement.

Code :
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
ORACLE_HOME=/usr/lib/oracle/10.2.0.1/client
 
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
 
TNS_ADMIN=/etc/oracle
 
export ORACLE_HOME LD_LIBRARY_PATH TNS_ADMIN
 
php -q /home/user/sources/script.php
Je ne sais pas si c'est très porpre mais au moins ça marche!
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. Lao Tseu ;o)
Devether est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h26.


 
 
 
 
Partenaires

Hébergement Web