Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-06-2009 13:31:33

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Connexion DB2 avec Zend

Bonjour,

je n'ai pas trouvé la réponse à ce que je cherche, bien que des sujets s'en rapprochent. J'ai pensé qu'il était plus simple de poster un nouveau message.

Je viens de commencer une application avec Zend (je débute). J'ai réussi à paramétrer une connexion mysql mais impossible de faire fonctionner une connexion db2 (sur un as400.- le serveur du site est un windows xp avec xampp et iseries).

Voila mon bootstrap ( il y a sans doute des erreurs je suis prenneur de toutes vos remarques! ):

Code:

<?php
//error_reporting(E_ALL|E_STRICT);
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/Paris');

// mise en place des répertoires et chargement des classes
set_include_path('.'
    . PATH_SEPARATOR . './library'
    . PATH_SEPARATOR . './application/models/'
    . PATH_SEPARATOR . get_include_path());
require_once "library/Zend/Loader.php";
Zend_Loader::registerAutoload();
Zend_Session::start();
//Zend_loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Config');
Zend_loader::loadClass('Zend_Db_Table');
Zend_loader::loadClass('Zend_Debug');
Zend_loader::loadClass('Zend_Auth');
/*Zend_Loader::loadClass("Zend_Acl");
Zend_Loader::loadClass("Zend_Acl_Role");
Zend_Loader::loadClass("Zend_Acl_Resource");*/

// Zend Auth & Zend Acl
$auth = Zend_Auth::getInstance();
//$acl = new MyAcl($auth);
// Chargement de la configuration
$config = new Zend_Config_Ini('./application/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);

$configas = new Zend_Config_Ini('./application/config.ini', 'as');
//$registry = Zend_Registry::getInstance();
$registry->set('config', $configas);
var_dump($registry);
// Mise en place de la BDD
$db = Zend_Db::factory($config->db);
//$dbAdapter = Zend_Db::factory($config->db->adapter,$config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('dbAdapter', $db);


$db2 = Zend_Db::factory($configas->db2);
//$dbAdapter = Zend_Db::factory($config->db->adapter,$config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db2);
Zend_Registry::set('dbAdapter2', $db2);

// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('./application/controllers');
Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));

// run!
$frontController->dispatch();

Et mon fichier de configuration config.ini:

Code:

[general]
db.adapter = PDO_MYSQL
db.params.host = 192.168.xx.xx
db.params.username = root
db.params.password = 
db.params.dbname = nom_de_base

[as]
db2.adapter = db2
db2.params.host = 192.168.xx.xx
db2.params.username = xxx
db2.params.password = xxx
db2.params.dbname = nom_de_base
db2.params.dbdriver = db2

Quand je lance mon site j'ai l'erreur:

"Notice: Use of undefined constant DB2_AUTOCOMMIT_ON - assumed 'DB2_AUTOCOMMIT_ON' in C:\sites\zf-tutorial\library\Zend\Db.php on line 253"

Dans php.ini j'ai activé :
extension=php_ibm_db2.dll
extension=php_pdo.dll

L'extension PDO me génère une erreur sous xampp: DB2CLI.DLL introuvable. Mais Apache se lance quand même...

Auriez vous des idées qui pourraient m'aider ?

Merci d'avance!

Hors ligne

 

#2 02-06-2009 14:04:45

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

J'ai ce message d'erreur aussi:

Notice: Use of undefined constant DB2_AUTOCOMMIT_ON - assumed 'DB2_AUTOCOMMIT_ON' in C:\sites\zf-tutorial\library\Zend\Db.php on line 253

Fatal error: Uncaught exception 'Zend_Db_Adapter_Db2_Exception' with message 'The IBM DB2 extension is required for this adapter but the extension is not loaded' in C:\sites\zf-tutorial\library\Zend\Db\Adapter\Db2.php:134 Stack trace: #0 C:\sites\zf-tutorial\library\Zend\Db\Adapter\Abstract.php(417): Zend_Db_Adapter_Db2->_connect() #1 C:\sites\zf-tutorial\library\Zend\Db\Adapter\Abstract.php(644): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Select), Array) #2 C:\sites\zf-tutorial\application\models\Commandeas.php(21): Zend_Db_Adapter_Abstract->fetchAll(Object(Zend_Db_Select)) #3 C:\sites\zf-tutorial\application\controllers\InterfaceController.php(66): Commandeas->affiche() #4 C:\sites\zf-tutorial\library\Zend\Controller\Action.php(503): InterfaceController->accueilcontentAction() #5 C:\sites\zf-tutorial\library\Zend\Controller\Dispatcher\Standard.php(285): Zend_Controller_Action->dispatch('accueilcontentA...') #6 C:\sites\zf-tutorial\library\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch( in C:\sites\zf-tutorial\library\Zend\Db\Adapter\Db2.php on line 134

Merci d'avance.

Hors ligne

 

#3 02-06-2009 14:16:39

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

Je ne m'en sors pas j'ai dû oublier un truc ou certainement mal faire ma connexion db2, la première connexion Mysql fonctionne très bien. J'ai peut-être aussi des problèmes de paramétrage dans mon php.ini. Quand pensez-vous?

Hors ligne

 

#4 02-06-2009 14:24:28

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Connexion DB2 avec Zend

Salut,

1. Il faut que tu actives l'extension db2 dans ton php.
2. Si tu veux te connecter sur ton i5, il te faut db2connect sur ton pc.
3. Est ce obligatoire de passer par un serveur pc car zendcore existe sur i5 en natif (V5R3 mini) ?
4. De plus il faut modifier une ligne dans le zendframework pour utiliser zend_db_table avec db2 i5.

Si tu veux plus de détail, bip moi.

David

Hors ligne

 

#5 02-06-2009 14:44:40

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

Bonjour David,

Tout d'abord merci pour ces infos.

Je dois être sur la mauvaise piste, j'ai repris la méthode de connexion d'une autre application (même base de données) faite avec Codeigniter. Elle fonctionne et se présente comme ça:

$db['db2']['hostname'] = "DRIVER=iSeries Access ODBC Driver;SYSTEM=192.168.X.X;DBQ=nom_de_base;";
$db['db2']['username'] = "user;";
$db['db2']['password'] = "pass;";
$db['db2']['database'] = "nom_de_base";
$db['db2']['dbdriver'] = "odbc";
$db['db2']['dbprefix'] = "";
$db['db2']['active_r'] = TRUE;
$db['db2']['pconnect'] = FALSE;
$db['db2']['db_debug'] = FALSE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = "";

Je devrais regarder plutôt du côté d'une connexion ODBC et non pas IBM DB2 ?? Comment adapter cette connexion pour ZEND?
(j'avoue que je suis un peu largué...)

Hors ligne

 

#6 02-06-2009 16:19:33

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

Bon je vais continuer de faire des tests, si je trouve une solution pour faire marcher ça correctement, je la posterais.

bonne journée.

Hors ligne

 

#7 02-06-2009 16:50:37

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

Apparemment les connexions ODBC posent problème sous ZEND (j'espère que je me trompe).
Comment faire pour retranscrire ma connexion codeigniter (ci-dessus) dans zend ?
Puis-je utiliser autre chose que ODBC (avec db2 le résultat est posté ci-dessus) pour me connecter a mon as400 via iseries ?

Hors ligne

 

#8 02-06-2009 18:36:05

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Connexion DB2 avec Zend

Hello,

Il te faut un client DB2 pour te connecter (celui qui va te fournir DB2CLI.DLL) même via PHP. Tu peux essayer Zend Server, sous Windows il suffit de cocher une case pour l'installer. Si tu es attaché à XAMPP, il faut aller sur le site : http://www-01.ibm.com/software/data/db2/

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#9 02-06-2009 20:57:13

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Connexion DB2 avec Zend

Le client db2 ne suffira pas pour te connecter si tu veux utiliser Zend_Db car effectivement ca ne gère pas le ODBC et donc il faut utiliser DB2 et alors il faut et la dll client et db2_connect (qui a les 2).
Il ne faut pas oublier l'extension db2 qui n'est pas dans xamp. Essaye Zend_Server qui a directement cette extension ou download la sur le site pecl4win et active la dans ton xamp.

Pour résumer si tu veux le faire fonctionner sur xamp :
1 db2_connect obligatoire (attention c'est payant mais il existe une version d'essai)
2 extension db2 pour php (pecl4win) et active la dans php

C'est pour cela que je ne conseille pas du tout une connexion i5 à partir d'un pc (windows/linux) car il faut une licence obligatoire de db2_connect.

Tu peux maintenant mettre tout sur ton i5 (mysql,php etc...) et même mettre un moteur db2i5 pour mysql si tu veux utiliser mysql et des tables db2. Il reste encore 2/3 bugs pour utiliser Zend_Framework complet sur le i5 mais ca tourne correctement.

Hors ligne

 

#10 03-06-2009 11:01:13

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Connexion DB2 avec Zend

Hello,

Ben chez moi, ça marche avec un simple client DB2 et un PHP installé à la mano sous Windows !!! Il s'agit de ma plateforme pour les tests ZF.

A+

Dernière modification par mikaelkael (03-06-2009 11:02:01)


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#11 03-06-2009 18:31:23

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Connexion DB2 avec Zend

Hello,

Sur un i5 ?
Ca fait un bail que je n'ai pas testé à partir d'un pc. Ibm aurait ouvert la connexion db2 i5 ?

Hors ligne

 

#12 03-06-2009 22:40:03

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Connexion DB2 avec Zend

Hello,

En relisant les demandes de shest, il ne parle pas d'i5. Dans mon cas ma base de test est sur un Windows (autre que mon serveur Web).

Depuis ZF1.8.0, Zend_Db_Adapter_Db2 intègre les spécificités i5 mais très franchement je ne suis pas un expert sur ce sujet wink.

A+

Dernière modification par mikaelkael (03-06-2009 22:40:52)


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#13 04-06-2009 13:16:08

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Connexion DB2 avec Zend

Salut,

Je me disais aussi. J'ai été vérifier ce matin et je confirme qu'il faut bien db2_connect et la dll client.
Sinon c'est odbc et donc pas de Zend_Db.

Effectivement, depuis la 1.8, Zend_Db_Adapter_Db2 intère les spécificités mais pas Zend_Db_Table smile
Ca merde encore un peu, j'ai déjà remonté le bug plusieurs fois mais ca n'a pas évolué. Pourtant il ne faut pas grand chose pour que cela fonctionne. Il y'a déjà un ticket ouvert la dessus.

A+

PS : as400 = i5 = iseries... ibm aime changer le nom de cette machine mais c'est la même.

Dernière modification par ledahu (04-06-2009 13:17:03)

Hors ligne

 

#14 04-06-2009 13:17:37

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Connexion DB2 avec Zend

Hello,

T'as le numéro du ticket ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#15 04-06-2009 14:01:55

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

Merci pour vos réponses. Je n'ai pas été clair sur l'environnement.

J'ai un pc windows avec xampp dessus. J'ai un site qui se connecte à une bdd mysql en local mais aussi à une base de données sur un AS400 et je communique avec lui avec iseries. J'utilisais Codeigniter avant zend framework, et je faisais des connexion ODBC. Maintenant que je suis passé sous zend, je n'arrive pas à reproduire ma connexion à l'AS400. J'ai installé un DB2 mais je galère pour le configurer. Je ne sais pas si il y a des problème d'autorisation de la part de l'AS400. J'ai donc choisi d'installer Zend serveur pour essayer, et puis quitte à se mettre sur zend, autant aller jusqu'au bout. Je vais donc faire d'autres tests mais mes connaissances en serveurs et réseaux sont assez limitées donc j'ai un peu l'impression d'avancer en aveugle.

Ma connexion iseries avec l'AS400 (connexion ODBC) ne peut pas marcher sous Zend ? Je suis bien obligé de le faire avec db2 ?

Bon je vais creuser encore plus tard, pas trop le temps tout de suite.

Merci pour vos commentaires ça me fait avancer.

Dès que j'ai du neuf je le poste.

Hors ligne

 

#16 04-06-2009 14:04:35

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

ledahu a écrit:

J'ai été vérifier ce matin et je confirme qu'il faut bien db2_connect et la dll client.
Sinon c'est odbc et donc pas de Zend_Db.

Bien noté.

Hors ligne

 

#17 04-06-2009 17:00:50

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

J'ai installé Zend server pour remplacer mon xampp. Je pose une question au passage :
J'ai déplacé mon projet dans le htdocs de zend, et maintenant ma page d'accueil se charge bien (comme avant) mais mon formulaire de login, au moment de l'envoi me renvoi une erreur 404:

"The requested URL /zf-tutorial/index was not found on this server."

Comment cela se fait je n'ai rien changé dans le projet...?
Y'a-t-il quelque chose qui m'echappe peut-être au niveau du htaccess ?

(Mais là ça n'a plus grand chose a voir avec mes problème de db2 roll )

Hors ligne

 

#18 04-06-2009 17:34:32

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

J'ai résolu ce point: mon httpd.conf n'était pas configuré comme il faut.
Donc tout remarche comme avant mais pour DB2:

" Fatal error: Uncaught exception 'Zend_Db_Adapter_Db2_Exception' with message '[IBM][CLI Driver] CLI0124E Valeur d'argument incorrecte. SQLSTATE=HY009 SQLCODE=-99999' in C:\Program Files\Zend\Apache2\htdocs\zf-tutorial\library\Zend\Db\Adapter\Db2.php:191 "

J'obtiens cette erreur, j'ai quand même l'impression d'avancer.

Dernière modification par shest (04-06-2009 17:45:39)

Hors ligne

 

#19 04-06-2009 17:57:25

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

Est-ce que cela semble correct?
Config.ini

Code:

[AS]
db2.adapter = db2
db2.params.host = 192.168.X.X
db2.params.username = XXXXXX
db2.params.password = XXXXXX
db2.params.dbname = XXXXXXXX
db2.params.dbdriver = db2

et le bootstrap:

Code:

$configas = new Zend_Config_Ini('./application/config.ini', 'as');
$registry->set('config', $configas);
$db2 = Zend_Db::factory($configas->db2);
Zend_Db_Table::setDefaultAdapter($db2);
Zend_Registry::set('dbAdapter2', $db2);

Je crois que c'est correct, mon problème doit se situer au niveau de l'accès lui-même. Avant pour requêter sur l'AS400 je faisais de l'ODBC via iseries, et dans administration ODBC j'avais définie mes connexions avec le nom de la bibliothèque etc. Mais là sans avoir fait ce genre de configuration j'ai l'impression que cela ne marchera jamais.

Est-ce que je me trompe ?

Dernière modification par shest (04-06-2009 18:01:09)

Hors ligne

 

#20 04-06-2009 18:05:16

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

ledahu a écrit:

3. Est ce obligatoire de passer par un serveur pc car zendcore existe sur i5 en natif (V5R3 mini) ?

En fait c'est un site web qui a sa propre base de données et qui interagit avec les bases d'un AS400. La politique ici est de laisser l'AS400, pas de web la-dessus ! Mais l'info n'est pas tombé dans l'oreille d'un sourd et je vais jeter un oeil sur Zend Core histoire de voir les possibilités et comment ça marche.

Hors ligne

 

#21 04-06-2009 18:27:14

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Connexion DB2 avec Zend

moi je mettrai :

Code:

[AS]
db2.adapter = db2
db2.params.host = 192.168.X.X
db2.params.username = XXXXXX
db2.params.password = XXXXXX
db2.params.dbname = XXXXXXXX
db2.params.schema = XXX

ou dbname est le nom de la base de données de l'as400. Fait un wrkrdbdire et tu auras le bon nom de base (celui en *local)
et schema est la bibliothèque dans laquelle tu lis les fichiers as400.

Pour le reste ca me parrait correct.

Pour revenir à ne pas mettre de web sur un as400, c'est un peu idiot sachant que c'est une machine très sure mais tu peux aussi créer une partition (V5R3 ou plus) et ne mettre que du web et ne partager que tes fichiers avec l'autre partition.
Pour mettre bon nombre de sites avec des bases db2 as400 depuis longtemps maintenant, je n'ai jamais eu de problème. Comme en plus les commandes ne sont pas des commandes connues, la plupart des scripts de hack ne fonctionne pas.
Si tu veux plus d'info msg moi directement.

Hors ligne

 

#22 04-06-2009 19:05:29

shest
Membre
Date d'inscription: 09-03-2009
Messages: 13

Re: Connexion DB2 avec Zend

Merci beaucoup pour tes nombreuses informations.

Mes paramètres doivent être corrects maintenant. Mais le message :
" Uncaught exception 'Zend_Db_Adapter_Db2_Exception' with message '[IBM][CLI Driver] CLI0124E Valeur d'argument incorrecte. " persiste.

Ce que je ne comprends pas c'est que avant j'avais i5 entre mon serveur et l'AS400.
Maintenant, il y a quoi ?

Dans mes services, zend server m'a mis:
- DB2 Security Server
- DB2 JDBC Applet Server

Si il me manque rien je dois avoir des erreurs quelque part.

Bon je vais creuser encore, très instructif dans tous les cas !

Et pour les sites directement sur l'AS400 ça me plaît pas mal je vais creuser aussi. Et la semaine prochaine petite formation zend smile (une vrai! )

Je mettrais mes infos ici si je trouve la solution (ou plutôt mon problème).

Hors ligne

 

#23 05-06-2009 11:37:53

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Connexion DB2 avec Zend

Essaye ca :

Code:

<?php
require_once "Zend/Loader.php"; 

// Set up autoload.
Zend_Loader::registerAutoload(); 

$db = Zend_Db::factory('Db2',array(
    'host'=>'xxxx',
    'username'=>'xxxx',
    'password'=>'xxxx',
    'dbname'=>'xxxx',
    'schema'=>'xxxx',
    'os'=>'i5',
));

Zend_Db_Table::setDefaultAdapter($db);

class Test extends Zend_Db_Table_Abstract {
    /**
     * The default table name 
     */
    protected $_name = 'tonfichier';
    protected $_schema = 'tabiblio';
    protected $_primary = 'taclé';
}

$Test = new Test();
$select = $test->select();

echo $select->__toString();
print_r($test->fetchAll($select));
?>

et dit moi si ca fonctionne...

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages