Installer informix client
Un article de Wiki SOS-ADMIN.
Guide proposé par Stéphane Primault 9 mar 2007 à 18:15 (CET)
Sommaire |
Introduction
Pour la société dont je suis employé actuellement, il me faut interroger des bases de données sous informix, depuis des scripts php.
Je vous propose une methode pour l'installation du client informix pour permettre des connexions externe en utilisant php.
Cette installation repose en grande partie sur ce tutoz :http://forums.gentoo.org/viewtopic.php?t=245249
Cette méthode doit pouvoir s'adapter pour d'autre distribution.
Télècharger le client
Vous trouverez les clients informix sur le site d'ibm (CSDK).
http://www14.software.ibm.com/webapp/download/search.jsp?rs=ifxdl
Sélectionner la version pour votre machine. Attention tou de même certain CSDK utilise rpm pour l'installation.
Pour ma part, j'ai utilisé : Informix Client SDK V2.81.UC3 32 bit for Linux on Intel
Vous le trouverez :
http://www14.software.ibm.com/webapp/download/search.jsp?q=&cat=&pf=&k=ALL&pn=&pid=&rs=ifxdl&S_TACT=104CBW71&status=Active&S_CMP=&b=&sb=rd&sr=11&fpf=Linux&fdt=
Installer le client
Création group et user
groupadd informix ; useradd -g informix -d /dev/null informix
Création répertoire
mkdir /opt/informix
Copie du client dans le répertoire créé
Copier le client que vous avez télécharger sur le site d'ibm, dans le répertoire nouvellement créé
Rajouter cpio sur votre système
Cpio vas servir à décompresser et installer les différentes lib nécessaire.
emerge cpio
Création variables d'environement
Des variables d'environnements sont nécessaire pour l'installation du client et la compilation du client pour php.
vi /etc/env.d/99informix
Copié les ligne ci-dessous dans le fichier, en modifiant les paramétres si nécessaire.
INFORMIXDIR=/opt/informix PATH=/opt/informix/bin ODBCINI=/opt/informix/etc/odbc.ini INFORMIXSERVER=nom_du_serveur_pour_la_connexion LDPATH=/opt/informix/lib:/opt/informix/lib/esql:/opt/informix/lib/cli:/opt/informix/lib/client
INFORMIXSERVER contient le nom du serveur pour la connexion, qui n'a rien à voir avec le nom propre de la machine.
Exemple :
Nom du serveur informix : donnee_net
Nom du serveur hébergeant le serveur de données : ns.xxxx.xxxxxxx
Ce nom se trouve dans le fichier sqlhosts de l'installation sur le serveur informix (en générale serveur_net) pour une connexion via tcp.
Ensuite mettre les variables d'environnement à jour.
env-update
Décompresser le client
cd /opt/informix cpio -idumB < csdk.cpi
Cela vas décompresser les différents fichiers et scripts pour l'installation.
Installer le client
Avec votre éditeur préféré, editer les fichiers :
- installclientsdk
- install_gls
- install_msg
Rechercher dans ces fichiers cpio -idumB et enlever le c ce trouvant dans les options.
Cela est nécessaire, car autrement cpio plante lors de la décompression des fichiers.
Une fois les modifications effectuées, lançais la commande d'installation.
cd /opt/informix/ sh installclientsdk -o
ou
cd /opt/informix/ ./installclientsdk -o
les options pour l'installation du client sont :
- -i : Pour installer ClientSDK avec un serveur de bases de données informix version 9.x
- -o : Pour installer ClientSDK avec un serveur de bases de données informix qui n'est pas une version 9.x
- -f : Pour forcer l'installation
Si pendant l'installation vous rencontrez une erreur du programme cpio, vérifier bien dans les différents scripts que vous n'avez pas oublié de supprimer le c des options.
Corriger le problème est relancé l'installation.
Configurer les fichiers
De nouveau avec votre éditeur préféré, édité le fichier slqhosts.
cd /opt/informix/etc/ vi sqlhosts
Vous avez un fichier ressemblant à ceci :
# ************************************************************************ # # IBM INC. # # PROPRIETARY DATA # # Licensed Material - Property Of IBM # # "Restricted Materials of IBM" # # IBM Informix Client SDK # # (c) Copyright IBM Corporation 2002. All rights reserved. # # Title: sqlhosts.demo # Description: # Default sqlhosts file for running demos. # #************************************************************************** demo_on onipcshm on_hostname on_servername demo_se seipcpip se_hostname sqlexec
Les différents paramètres sont :
- DataBase Server Name : le nom du serveur
- Protocol : Type de connexion à utiliser. La valeur est composée de 8 lettres.
- Les deux premières correspondent au produit (« se » pour Informix Standard Engine (SE) 7.x, « ol » pour Informix Dynamic Server (son ancien nom était Informix OnLine)
- Les trois suivantes à l’interface (« ipc » pour la communication inter-processus, « soc » pour Sockets)
- Les trois dernières au protocole réseau (« spx » pour IPX/SPX, « tcp » pour TCP/IP). Sous Windows, on choisira le plus souvent olsoctcp
- Host : Le nom ou l’adresse IP de la machine hébergeant le serveur. Vous devez vous assurer que le nom de la machine peut être résolu en adresse IP, grâce au fichier hosts ou à un serveur WINS ou DNS.
- Service : Correspond au nom du service, tel que défini dans le fichier services de la machine hébergeant le serveur. Le fichier services du client doit aussi contenir la référence.
Pris sur : http://www.supinfo-projects.com/fr/2004/dynamic_server_94_fr/1/
Pour les paramétres, regardez sur le serveur de données ce qui est noté dans le fichier sqlhosts pour une connexion tcp/ip.
En régle générale, vous devriez trouver deux type de connexion dans ce fichier, un connexion sur socket et une connexion tcp/ip.
Rechercher sur le serveur de données le port de connexion ce trouvant dans le fichiers services :
less /etc/services
le port se trouve en face de sqlexec.
Par exemple :
sqlexec 1525/tcp # Informix connect
Une fois trouvé le numéro du port utilisé et le nom du service, sur la machine cliente, edité le fichier services et recopié les lignes dans celui-çi (pensez à vérifier que ce port ne soit pas déjà utiliser par un autre service.
Il se peut que le nom du service ne soit pas sqlexec. Dans ce cas adapter en fonction de votre configuration.
Compiler PHP
Maitenant il ne vous reste plus qu'à compiler PHP.
USE="informix iodbc" emerge -av php
Pour ma part sur le servuer de ma société, j'utilise plutôt :
USE="informix iodbc" emerge -av "dev-lang/php-5*"
Car je me sers aussi bien de php4 que php5 en fonction de certaines applis interne.
APACHE httpd.conf
Rajouter dans httpd.conf les lignes suivante :
SetEnv INFORMIXDIR /opt/informix SetEnv ODBCINI /opt/informix/etc/odbc.ini SetEnv INFORMIXSQLHOSTS /opt/informix/etc/sqlhosts SetEnv INFORMIXSERVER nom_du_serveur_pour_la_connexion
Ensuite redemarer apache pour prendre en compte les modifications
/etc/init.d/apache2 restart
Faite une page de test avec phpinfo() pour vérifier que vous voyez bien les variables d'environnment. Extrait phpinfo()
INFORMIXDIR /opt/informix INFORMIXSERVER nom_du_serveur_pour_la_connexion INFORMIXSQLHOSTS /opt/informix/etc/sqlhosts ODBCINI /opt/informix/etc/odbc.ini PATH /bin:/usr/bin:/opt/informix/bin:/opt/informix/lib:/opt/informix/lib/esql:/opt/informix/lib/cli:/opt/informix/lib/client
SUPHP
Si vous utilisez SUPHP, il vous faut rahouter dans le fichier de configuration le PATH pour informix :
vi /etc/suphp.conf
Rechercher et modifier la ligne env_path
;PATH environment variable env_path=/bin:/usr/bin:/opt/informix/bin:/opt/informix/lib:/opt/informix/lib/esql:/opt/informix/lib/cli:/opt/informix/lib/client
Pour finir relancer apache pour la prise en compte des modifications.
Pour finir
Vous pouvez utiliser ce petit script pour tester :
<?php
$conn_id = ifx_connect ("basededonnees@nomduserveur", "login", "pwd");
if (!$conn_id){
echo "Connexion impossible => ".ifx_error()."<br />".ifx_errormsg();
}else{
echo "Connexion réussi</br />";
$sql="SELECT * FROM votretable";
ifx_textasvarchar(1);
ifx_byteasvarchar(1);
$rid = ifx_prepare ($sql, $conn_id, IFX_SCROLL);
//echo $rid.'<br />';
if (! $rid) {
// ... erreur ...
echo "Probleme requête => ".ifx_error()."<br />".ifx_errormsg();
}
$rowcount = ifx_affected_rows($rid);
if ($rowcount > 1000) {
printf ("Trop de lignes dans le résultat : (%d)\n<br />", $rowcount);
die ("Recommencez votre requête <br />\n");
}
if (!ifx_do($rid)) {
// ... erreur ...
echo "Probleme exécution requête => ".ifx_error()."<br />".ifx_errormsg();
}
ifx_htmltbl_result($rid, 'border="2"');
ifx_free_result($rid);
}
@ifx_close($conn);
?>
Bonne utilisation...

