Ces fonctions vous permettront d'accéder aux serveurs Oracle10, Oracle9,
Ocracle 8 et Oracle7 en utilisant l'interface Oracle Call-Interface (OCI).
Elle supporte le liage de variables PHP avec des marqueurs Oracle,
a un support complet des LOB, FILE et ROWID, et vous permet d'utiliser
des variables définies fournies par l'utilisateur.
Vous avez besoin des bibliothèques Oracles pour utiliser cette extension.
Les utilisateur Windows doivent les bibliothèques de version 10 ou supérieure pour
se servir de la bibliothèque php_oci8.dll.
La meilleure façon d'installer tous les fichiers nécessaires
est d'utiliser le client Oracle Instant, qui est disponible depuis :
http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html.
Pour fonctionner avec OCI8, le module OCI8 "basic" du client Oracle Instant est
suffisant. Le client Instant n'a pas besoin que les variables d'environnement
ORACLE_SID ou ORACLE_HOME soient définies.Par contre, vous devez toujours
définir les variables LD_LIBRARY_PATH et NLS_LANG.
Avant d'utiliser cette extension, assurez-vous que vous avez bien
paramétré vos variables d'environnement Oracle, ainsi que votre
démon utilisateur. Ces variables doivent être définies avant
de démarrer votre serveur web. Les variables dont vous pouvez avoir besoin sont :
ORACLE_HOME
ORACLE_SID
LD_PRELOAD
LD_LIBRARY_PATH
NLS_LANG
ORA_NLS33
NLS_LANG
Pour les variables d'environnement Oracle moins fréquemment utilisées
comme TNS_ADMIN, TWO_TASK, ORA_TZFILE ainsi que les
diverses configurations globales Oracle comme les variables
ORA_NLS33, ORA_NLS10 et NLS_*, référez-vous à la documentation Oracle.
Après avoir configuré ces variables pour votre utilisateur "serveur
web", assurez-vous aussi d'ajouter cet utilisateur (nobody,
www) au groupe Oracle.
Si votre serveur web ne démarre pas ou plante au démarrage avec Oracle :
Vérifiez que Apache a bien été compilé avec la bibliothèque pthread :
Si la libpthread n'est pas listée, vous devez réinstaller Apache :
Exemple 2. Reinstaller Apache avec pthread
# cd /usr/src/apache_1.3.xx
# make clean
# LIBS=-lpthread ./config.status
# make
# make install
Notez bien que sur certains systèmes comme UnixWare il faut utiliser
libthread au lieu de libpthread. PHP et Apache doivent alors être configurés
avec EXTRA_LIBS=-lthread.
Le délai maximal (en secondes) q'un processs donné est autorisé
à maintenir une connexion persistante. Le fait de définir cette option
à -1 signifie que les connexions persistantes seront toujours maintenues.
Le délai maximal (en secondes) Ã attendre avant d'envoyer un ping durant
oci_pconnect(). Lorsque définie à 0, les connexions
persistantes seront pingugées à chaque réutilisation. Pour désactiver
complètement les pings, déifnissez cette option à -1.
Note :
Le fait de désactiver les pings rende les appels à oci_pconnect()
hautement rentables, mais cela empèche PHP de détecter les problèmes de connexion,
comme les problèmes de réseau, ou si le serveur Oracle a été éteint depuis la
connexion de PHP. Consultez la documentation de la fonction
oci_pconnect() pour plus d'informations.
Cette option active la mise en cache des requêtes, et spécifie le nombre de requêtes
à mettre en cache. Pour désactiver la mise en cache des requêtes, définissez cette
option à 0.
Note :
Un énorme cache peut accroître les performances, mais causera un
accroissement de la mémoire.
Cette option active la prérécupération des requêtes et définie le nombre
de lignes par défaut à récupérer automatiquement après l'exécution de la
requête.
Note :
Une large prérécupération peut accroître les performances, mais causera
un accroissement de la mémoire.
Cette option contrôle le comportement de la fonction oci_close().
Activer cette option signifie que oci_close() ne fera rien du tout ;
la connexion ne sera pas fermée tant que la fin du script ne sera pas atteinte. Ceci est uniquement
pour assurer une compatibilité ascendante. Si vous pensez que vous devez activer
cette option, vous êtes vivement encouragé Ã
effacer les appels à la fonction oci_close() de votre application
au lieu d'activer cette option.
Ces constantes sont définies par cette
extension, et ne sont disponibles que si cette extension a été compilée avec
PHP, ou bien chargée au moment de l'exécution.
Mode de lecture de résultats. Utilisé lorsque les applications
savent à l'avance le nombre de ligne qu'il faudra lire.
Ce mode désactive la lecture anticipée d'Oracle version 8
et plus récente. Le curseur est annulé une fois que le nombre
de lignes à lire a été atteint, et cela réduit les ressources
consommées côté serveur.
Utilisé avec oci_connect() pour se connecter comme SYSOPER
utilisant des créances externes (oci8.privileged_connect
doit être activé pour utiliser cette constante).
Utilisé avec oci_connect() pour se connecter comme SYSDBA
utilisant des créances externes (oci8.privileged_connect
doit être activé pour utiliser cette constante).
// Cela appelle la procédure stockée sp_newaddress, avec la variable :address_id // pour les entrées/sorties et :error_code comme variable de sortie. // Ensuite, vous faites les liaisons suivantes :
L'extension oci8 fournit 3 fonctions différentes pour se connecter
à Oracle. Il vous appartient d'utiliser la fonction la plus appropriée
pour votre application ; les informations contenues dans cette section
vont vous aider à faire le bon choix.
La connexion à un serveur Oracle est une opération résonnablement couteuse
en terme de temps que cela prend. La fonction oci_pconnect()
utilise un cache persistent de connexion qui peut être réutilisé Ã travers
différents scripts. Cela signifie qu'une seule connexion sera utilisée par
processus PHP (ou enfant Apache).
Si votre application se connecte à Oracle en utilisant un jeu différent de crédance
pour chaque utilisateur web, le cache persistent utilisé
par la fonction oci_pconnect() devient moins approprié
car l'augmentation du nombre concurrent d'utilisateurs va affecté les performances
de votre serveur Oracle, car il devra maintenir trop de connexions en cache.
Si votre application est de ce type, il est recommandé d'optimiser votre application
en utilisant les options de configuration oci8.max_persistent et oci8.persistent_timeout
(elles vous donnent le contrôle sur la taille et la durée de vie du cache
de connexions persistentes) ou utilisez
oci_connect() Ã la place.
Les fonctions oci_connect() et oci_pconnect()
employent un cache de connexion ; si vous faites des appels multiples
à oci_connect(), en utilisant les mêmes paramètres dans
un script donné, le second appel ainsi que les suivants retourneront le gestionnaire
de connexion existant. Le cache utilisé par la fonction oci_connect()
est nettoyé Ã la fin de l'exécution du script ou lorsque vous fermez explicitement
le gestionnaire de connexion. oci_pconnect() a un comportement
sensiblement identique, Ã la différence que le cache est maintenu séparemment
et est conservé entre les requêtes.
Il est important de se souvenir de cette fonctionnalité de cache, car il donne
l'apparence que les deux gestionnaires ne sont pas isolés transactionnellement (ils
sont en faite le même gestionnaire de connexion, ils ne sont donc absolument pas
isolés). Si votre connexion a besoin de deux connexions séparées, isolées
transactionnellement, vous devez utiliser la fonction oci_new_connect().
oci_new_connect() crée toujours une nouvelle connexion au
serveur Oracle, indépendamment de l'existante d'autres connexions.
Les applications web à fort trafic doivent éviter d'utiliser
oci_new_connect(), particulièrement dans les sections
les plus chargées de l'application.