Introduction
La présente documentation a pour objectif de décrire la communication entre
Sybase ASE 12.5 et PHP version 4.1.0 sous Windows pour des développements en
local grâce à l’extension php_sybase_ct.dll
(PHP/ Sybase Open Client
CT-LIB).
Dans un premier temps, les raisons de la montée de version de la machine PHP
sont indiquées et les manipulations à réaliser dans le fichier php.ini
pour la
communication avec Sybase 12.5 (Open Client CT-LIB) sont décrites en détail.
Montées de version de la machine PHP (4.0.4 à 4.1.0)
Problème avec la version 4.0.4
Sous Windows, l’appel des fonctions sybase_connect()
et
sybase_pconnect()
, fonctions php disponibles grâce à l’extension
php_sybase_ct.dll
, engendrent un GPF (crash) avec la version 4.0.4 de PHP.
Montée de version de la machine PHP (4.0.4 => 4.0.6)
Des tests d’appel des méthodes sybase_connect
et sybase_pconnect
ont
été réalisés avec la version 4.0.6 de la machine PHP et effectivement les
problèmes sont résolus comme l’indique le site www.php.net. Toutefois il
ne s’agit pas de cette version de machine qui a été retenue (voir
prochain paragraphe)
Montée de version de la machine PHP (4.0.6 => 4.1.0)
La version 4.1.0 de PHP indique des performances accrues sous Windows. Ce
qui est effectivement le cas. Les tests avec les méthodes sybase_connect
et
sybase_pconnect
ont été par ailleurs réalisés avec succès sur cette version.
La version 4.1.0 de PHP est actuellement retenue pour les développements PHP avec Sybase 12.5.
Paramétrage de PHP pour interroger un serveur Sybase ASE 12.5
Pour utiliser l’extension Sybase disponible avec PHP, le fichier
php.ini
doit être retouché en vue d’implémenter cette extension. Les
manipulations à effectuer dans ce fichier sont décrites dans les paragraphes
qui suivent.
L’extension Sybase CT-LIB de PHP sous Windows : php_sybase_ct.dll
L’extension Sybase pour PHP sous Windows est disponible avec la
bibliothèque php_sybase_ct.dll
. Cette dernière extension est située dans le
répertoire %INSTALL_PHP%\extensions
. php_sybase_ct.dll
utilise la couche Open
Client CT-LIB de Sybase Adaptive Server Enterprise.
Il existe également l’extension php_sybase.dll
, mais celle-ci communique
avec la couche DB-LIB de Sybase ASE, couche en cours de décommissionnement.
Si ce n’est pas encore le cas, indiquer dans le fichier php.ini
la
localisation des extensions PHP dans le système de fichiers. Cette information
est renseignées avec la directive extension_dir
du paragraphe [Paths and
Directories]
du fichier php.ini
.
Exemple :
%INSTALL_PHP%\php.ini
[Paths and Directories]
…
; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:\Php\extensions"
Dans une seconde étape, indiquer dans le fichier php.ini
que
l’utilisation de la bibliothèque Sybase CT-LIB php_sybase_ct.dll
est
autorisée. Pour activer cette extension, décommenter la ligne php_sybase_ct.dll
dans la rubrique [Extensions]
du fichier php.ini
%INSTALL_PHP%\php.ini
[Extensions]
…
php_sybase_ct.dll
…
Variable d’environnement PATH et %SYBASE%\%SYBASE_OCS%
L’extension php_sybase_ct.dll
communique avec les librairies Sybase Open
Client Sybase 12.5, parmi les plus importantes :
libcs.dll
libct.dll
libblk.dll
Ces librairies sont dans le répertoire %SYBASE%\OCS-12_5\dll
, %SYBASE%
étant
le répertoire d’installation du client ou du serveur Sybase Adaptive Server
Enterprise 12.5.
Pour assurer une bonne communication entre l’extension php_sybase_ct.dll
et
les librairies Open Client ASE 12.5, vérifier que la variable d’environnement
PATH
Windows contient bien le répertoire %SYBASE%\OCS-12_5\dll
. Si le
répertoire d’installation %SYBASE%
est C:\Sybase
:
DOS> echo %PATH%
C:\Sybase\OCS-12_5\dll;%PATH%
Fichier Interfaces ou sql.ini de Sybase
La fonction PHP sybase_connect
prend en premier argument le nom logique du
serveur ASE :
<?php sybase_connect("DBA_T1_ASE",user,password); ?>
Les machines et ports correspondant aux noms logiques des serveurs ASE sont
référencés dans le fichier $SYBASE/interfaces
sous Unix et %SYBASE%\ini\sql.ini
sous Windows :
%SYBASE%\ini\sql.ini
[DBA_T1_ASE]
master=NLWNSCK,N-000505-PAR,30000
query=NLWNSCK,N-000505-PAR,30000
Vérifier que le fichier sql.ini
est présent et à jour dans le répertoire
%SYBASE%\ini
Il existe effectivement une directive sybase.interface_file
dans le fichier
php.ini
pour indiquer le chemin d’accès au fichier interfaces
ou sql.ini
, mais
cette directive concerne uniquement l’extension php_sybase.dll
qui utilise la
couche DB-LIB prochainement obsolète. Cette directive est sans effet avec
l’extension php_sybase_ct.dll
.
%INSTALL_PHP%\php.ini
[Sybase]
; Extension sybase utilisant DB-LIB, prochainement décommissionné
…
sybase.interface_file = "C:\Sybase\ini\sql.ini"
Paramétrages annexes (sévérité)
Un serveur Sybase ASE peut renvoyer un numéro de message ou d’erreur.
Les seuils de ces valeurs à partir desquels PHP doit lever des alertes sont
définis dans les directives sybct.min_server_severity
et
sybct.min_client_severity
du paragraphe [Sybase-CT] dans le fichier php.ini
:
%INSTALL_PHP%\php.ini
[Sybase-CT]
…
; Minimum server message severity to display.
sybct.min_server_severity = 10
; Minimum client message severity to display.
sybct.min_client_severity = 10
Par défaut, ces directives sont fixées à 10, aussi lorsque la directive
display_errors
est à on, le simple message informatif "Changed database context
to <dbname>"
(sévérité 10) est levé comme une alerte par PHP :
Warning: sybase_connect() [function.sybase-connect.html]: Sybase: Server message:
Changed database context to 'SYB_STATS'.
(severity 10, procedure N/A) in D:\intranet\sqlpac\sybconnect.php5 on line 5
La sévérité niveau 10 est un peu basse pour ces directives car tous les messages informatifs seront traités comme des alertes par PHP. Le seuil le plus adéquat est une sévérité fixée à 11, voire 16.
[Sybase-CT]
…
; Minimum server message severity to display.
sybct.min_server_severity = 11
; Minimum client message severity to display.
sybct.min_client_severity = 11
Les sévérités 10 à 16 sont des erreurs qui peuvent être fixées côté utilisateur :
Severity Level 10
: Information de statutSeverity Level 11
: Objet base de données non trouvéSeverity Level 12
: Type de données inadéquatSeverity Level 13
: Erreur utilisateur dans la syntaxe d’une transactionSeverity Level 14
: Permission refusée pour exécuter une commandeSeverity Level 15
: Erreur de syntaxe dans une commande SQLSeverity Level 16
: Erreurs utilisateurs diverses
Les sévérités 17 à 26 sont des erreurs systèmes (ressources insuffisantes, problèmes hardware, tables corrompues…).
Un simple programme PHP 4.1 interrogeant une base Sybase 12.5
$objRessource = sybase_connect("DBA_T1_ASE","inv_maj","****"); $_select_db = sybase_select_db("SYB_STATS",$objRessource); $result = sybase_query("select id,name from sysobjects where type='U'",$objRessource); while($row = sybase_fetch_row($result)) { print $row[0].";". $row[1]."<br>"; } echo sybase_num_rows($result)." lignes<br>"; sybase_free_result($result); sybase_close($objRessource);
1040722760;INV_APPLICATIONS_20080619 461244698;GDHQPlans 4195065;INV_HAPPS … 75 lignes
1. | Ouverture de la connexion avec la fonction sybase_connect(servername, username, password) :
Un objet ressource $objRessource est obtenu en retour de la fonction sybase_connect |
2. | La base utilisateur SYB_STATS est sélectionnée avec la fonction sybase_select_db(dbname,<objet ressource>) :
|
3. | La requête "select id,name from sysobjects where type='U'" est envoyée au serveur ASE
avec la fonction sybase_query(query,<objet ressource>) :
Un objet résulat $result de type curseur est obtenu en retour de la fonction sybase_query |
4. | Les lignes sont extraites de l’objet result avec la fonction sybase_fetch_row(<objet resultat>) :
|
5. | Le nombre de lignes est affiché avec la fonction sybase_num_rows(<objet resultat>) :
|
6. | L’objet résultat $result est libéré avec la fonction sybase_free_result(<objet resultat>) :
|
7. | La connexion est fermée avec la fonction sybase_close(<objet ressource>) :
|