Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 01/03/2010, 14h15   #1
Membre du Club
 
Inscription : mars 2007
Messages : 165
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2007
Messages : 165
Points : 68
Points : 68
Par défaut Accès à une base DB2

Bonjour,

J'ai un serveur DEBIAN, avec PHP5 installé dessus.
Je cherche à attaquer une base DB2 distante en natif (je veux éviter l'ODBC car il y aura pas mal de transactions). Apparemment il faudrait que je recompile DEBIAN et PHP avec des librairies spécifiques à l'AS400.... mais avant de m'engager dans des travaux d'hercules, j'aimerai avoir des retours d'expériences.

Est-ce que l'un d'entre vous a déjà tenté l'aventure? Que pouvez vous en dire? Quelles sont les plus grosses difficultés à contourner, comment vous vous y êtes pris, est-ce que ça fonctionne bien, etc.

Merci de vos retours.

Théo
Théolude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2010, 15h06   #2
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 39
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : novembre 2007
Messages : 39
Points : 30
Points : 30
bonjour,

Je n'ai pas l'expérience de connexion à DB2 avec php mais pourquoi ne pas utiliser PDO ?

http://php.net/manual/fr/ref.pdo-odbc.php
greg91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2010, 17h14   #3
Membre du Club
 
Inscription : mars 2007
Messages : 165
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2007
Messages : 165
Points : 68
Points : 68
Citation:
ibm_db2

./configure --with-pdo-odbc=ibm-db2,/opt/IBM/db2/V8.1/
Pour construire PDO_ODBC avec la saveur ibm-db2, vous devez avoir précédemment installé les en-têtes de développement de l'application de DB2 sur la même machine sur laquelle vous compilez PDO_ODBC. Les en-têtes de développement de l'application DB2 sont une option d'installation dans les serveurs DB2 et sont aussi disponibles en tant que DB2 Application Development Client gratuitement disponibles pour téléchargement à partir du » site. IBM DB2 Universal Database.
Snifff ça paraissait trop simple.....
Théolude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2010, 17h16   #4
Membre du Club
 
Inscription : mars 2007
Messages : 165
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2007
Messages : 165
Points : 68
Points : 68
Sinon j'ai vu ça....

http://www.developpez.net/forums/d83...-pconnect-php/
Théolude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2010, 11h55   #5
Membre du Club
 
Inscription : mars 2007
Messages : 165
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2007
Messages : 165
Points : 68
Points : 68
Aide toi et dieu t'aidera (à défaut de la communauté

Alors voilà ce que j'ai fait et qui a marché:

Citation:
1. apt-get update
2. apt-get install libaio1 ksh libstdc++5 (pour la compilation des sources DB2)
3. apt-get install php5-dev (pour les modules PECL et PEAR).
4. apt-get install gcc (pour la compilation des modules PHP DB2)
5. (Télécharger le fichier d’installation de DB2 Express-C sur http://www-01.ibm.com/software/data/.../download.html)
6. (Le déposer sur le serveur Linux avec scp ou en FTP).
7. (Aller dans le répertoire où il a été copié)
8. ./db2_install
9. cd /var/tmp/
10. wget http://pecl.php.net/get/ibm_db2-1.8.3.tgz (module DB2 PECL)
11. tar –xvzf ibm_db2-1.8.3.tgz
12. cd ibm_db2-1.8.3
13. phpize
14. ./configure --with-IBM_DB2=/opt/ibm/db2/V9.7/ (selon la version de DB2 Express-c)
15. make
16. make install
17. vi /etc/php5/apache2/php.ini
18. (Ajouter le module : extension=ibm_db2.so)
19. vi /etc/php5/cli/php.ini
20. (Ajouter le module : extension=ibm_db2.so)
21. /etc/init.d/apache2 restart


Maintenant je dois paramétrer les instances DB2 sur mon serveur DEBIAN pour attaquer la base DB2 distante... si vous avez des infos et des tuyaux, merci de votre aide.

Théo
Théolude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2010, 20h24   #6
Membre du Club
 
Inscription : mars 2007
Messages : 165
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2007
Messages : 165
Points : 68
Points : 68
Quand je me connecte avec db2_connect, je récupère une erreur.
Citation:
[IBM][CLI Driver] SQL10007N Message "0" could not be retrieved. Reason code: "3". SQLCODE=-1390
Voici mon code:
Code :
1
2
$dsn = "HOSTNAME=172.16.0.1;PORT=21;DATABASE=SVI_ADR2/A140W00F;PROTOCOL=TCPIP;UID=XXXXXXXXXXX;PWD=XXXXXXXXX;";
if (! $obj_connexion = db2_connect($dsn, "XXXXXXXX", "XXXXXXXXX")) print("Connexion refusée - ".db2_conn_errormsg()." // ".db2_conn_error());
Ce que dit IBM sur cette erreur:
Citation:
Message msgno could not be retrieved. Reason code: code .

The message file could not be found. Either the file does not exist, or the directory the message file should be in does not exist. Check that a either a 'prime' directory (the default) or a directory with the same name as the 'LANG' environment variable exists under the message directory.
J'ai aussi vu ça sur le code de retour d'erreur SQL:
http://www.dbforums.com/db2/781874-sqlcode-1390-a.html
Citation:
SQL1390C The environment variable DB2INSTANCE is not defined or is invalid.

Explanation: The environment variable DB2INSTANCE is not defined
or is not set to a valid instance owner.

User Response: Set the DB2INSTANCE environment variable to the
name of the instance to use. If you do not know the name of the
instance to use or how to set the DB2INSTANCE environment
variable to the instance name, refer to the Administration
Guide.

Federated system users: refer to the Installation and
Configuration Supplement for DB2INSTANCE information.

Ensure your PATH environment variable contains the sqllib/adm
path in the home directory of the instance you want to use (for
example, /u/instance/sqllib/adm, where /u/instance is the home
directory of the instance owner on a UNIX system).
Bref je pense que j'ai un problème avec mon instance DB2 sur Linux.... mais comment la créer exactement.... that is the question
Théolude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2010, 14h58   #7
Membre du Club
 
Inscription : mars 2007
Messages : 165
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2007
Messages : 165
Points : 68
Points : 68
Bon à force je vais peut être y arriver.

J'ai trouvé une discussion sur un forum de debian à ce sujet, ils passaient eux par le module ODBC du client Iseries d'IBM.

Voici le lien http://forum.debian-fr.org/viewtopic...it=db2#p202569.

Et une copie de la partie la plus intéressante si le lien disparaissait:

Citation:
Procédure réalisée sur debian 4.0r4a-i386


Code:tux3:~# apt-get install unixodbc unixodbc-dev alien php5 php5-odbc libstdc++5 apache2
tux3:~# /etc/init.d/apache2 force-reload


telechargement de iSeriesAccess-5.4.0-1.6.i386.rpm depuis http://www.ibm.com (laborieux à obtenir, je le joint au post, a non il est trop gros, désolé ...)

Code:tux3:~# alien -i iSeriesAccess-5.4.0-1.6.i386.rpm --scripts
tux3:~# ln -s /usr/lib/libstdc++.so.5 /opt/ibm/iSeriesAccess/lib/libstdc++.so.5
tux3:~# ldconfig



fichier /etc/odbcinst.ini

Code:[iSeries]
Description = iSeries Access for Linux ODBC Driver
Driver = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
NOTE1 = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2 = the following Driver64/Setup64 keywords will provide that support.
Driver64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading = 2
DontDLClose = 1
UsageCount = 1



fichier /etc/odbc.ini

Code:[i5plus]
Description = serveur Iseries (Movex)
Driver = iSeries
System = 192.168.1.1



fichier /var/www/test.php

Code:<?php
//
$dsn = i5plus;
$user = #######;
$passwd = #######;
$conn = odbc_connect($dsn,$user,$passwd );
//
echo "votre id de connexion est : $conn";
//
if ($conn <= 0) { echo "\nErreur\n"; }
else { echo "\nSuccès\n"; }
//
odbc_close($conn);
//
?>



pour finir je lance depuis mon navigateur http://tux3/test.php, et Ô miracle de la technologie

Code:votre id de connexion est : Resource id #2

Succès

merci moi.
@+
Je vous tiens au courant ...
Théolude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2010, 15h36   #8
Membre du Club
 
Inscription : mars 2007
Messages : 165
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : mars 2007
Messages : 165
Points : 68
Points : 68
CA MARCHE !!!!!

Quelques remarques, bien faire attention à la casse lors de la création du DSN ODBC, penser à renommer aussi l'étiquette de l'instance ODBC (odbcinst.ini).

Donc en ODBC en utilisant le package RPM du Iseries et en pensant bien à faire le lien avec les librairies, ça fonctionne plutôt pas mal....

Pour l'accès natif, je n'ai toujours pas réussi à comprendre et à faire fonctionner leurs fameuses instances DB2.... si quelqu'un a un tuyau.

Théo
Théolude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2010, 21h35   #9
Invité de passage
 
Inscription : mai 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 7
Points : 1
Points : 1
Alors là un grand merci à toi d'avoir pris le temps de poster ces messages !
Ca m'a mis sur la voie.

Cependant, j'ai des soucis.

J'ai effectué la procédure d'installation que tu as mis.
Tout est ok.
Sauf pour libstdc++5, je suis sur Ubuntu 9.10 (voir ce poste pour l'installer : http://hsmak.wordpress.com/2009/12/0...n-ubuntu-9-10/)

J'ai installé une DB2 Express sous Windows Server 2003.
Le port utilisé est le 50000.
J'ai donc configuré le port dans le fichier odbcinst.ini sur Ubuntu :
Code :
1
2
3
4
5
6
 
[SAMPLE]
Description = serveur Iseries (Movex)
Driver      = iSeries
System      = 172.16.88.130
ServerPort  = 172.16.88.130:50000
Mais lorsque je teste voici le message de mon navigateur :

Citation:
Warning: odbc_connect() [function.odbc-connect]: SQL error: [unixODBC][IBM][System i Access ODBC Driver]Communication link failure. comm rc=10061 - CWBCO1049 - The System i server application is not started, or the connection was blocked by a firewall, SQL state 08004 in SQLConnect in /var/www/db2/test.php on line 6
votre id de connexion est : Erreur
Warning: odbc_close(): supplied argument is not a valid ODBC-Link resource in /var/www/db2/test.php on line 13
Quand j'utilise Wireshark pour regarder les trames ip, je constate que le serveur Ubuntu tente une connexion sur le port 8471 de mon W2k3.

Citation:
Transmission Control Protocol, Src Port: 43120 (43120), Dst Port: pim-port (8471), Seq: 0, Len: 0
Comment ce faisse ?

Si tu as un début de réponse, merci !

A tout hasard, voici mon fichier odbcinst.ini :
Citation:
[iSeries]
Description = iSeries Access for Linux ODBC Driver
Driver = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
NOTE1 = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2 = the following Driver64/Setup64 keywords will provide that support.
Driver64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading = 2
DontDLClose = 1
UsageCount = 1
et mon fichier test.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<?php
//
$dsn    = "SAMPLE";
$user   = "db2admin";
$passwd = "test1234";
$conn   = odbc_connect($dsn,$user,$passwd );
//
echo "votre id de connexion est : $conn";
//
if    ($conn <= 0) { echo "\nErreur\n";      }
else               { echo "\nSuccès\n";   }
//
odbc_close($conn);
//
?>
flashblack86 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 +1. Il est actuellement 03h33.


 
 
 
 
Partenaires

Hébergement Web