IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Accès à une base DB2


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    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

  2. #2
    Membre confirmé Avatar de greg91
    Homme Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut
    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

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut
    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.....

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mars 2007
    Messages : 186

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut
    Aide toi et dieu t'aidera (à défaut de la communauté

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

    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

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut
    Quand je me connecte avec db2_connect, je récupère une erreur.
    [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved. Reason code: "3". SQLCODE=-1390
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    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
    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

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut
    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:

    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 ...

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Par défaut
    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

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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.

    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 :
    [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    //
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Accés à une base de données AS400
    Par Green Hornet dans le forum Accès aux données
    Réponses: 8
    Dernier message: 14/11/2011, 11h26
  2. Accès à une base Pervasive
    Par david_chardonnet dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/10/2005, 20h53
  3. [SYBASE] Acces à une base SYBASE V12 via VB6
    Par pulley60 dans le forum Sybase
    Réponses: 2
    Dernier message: 23/09/2004, 14h21
  4. Refus d'accès à une base Firebird
    Par severine dans le forum Installation
    Réponses: 18
    Dernier message: 04/06/2003, 16h03
  5. [Dev-C++] Accès à une base MySQL
    Par Beetlejuice dans le forum Dev-C++
    Réponses: 8
    Dernier message: 08/05/2003, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo