Page 1 sur 1

Connexion ODBC AS400

Posté : 14 oct. 2016, 13:29
par massmass
J'ai une application qui tape dans un AS400 via une connexion ODBC.
J'utilise wamp (apache: V2.1.1/ php:V5.4.12)
mon code:
$dbname='Driver={iSeries Access ODBC Driver};System=AS400';
$dbid=odbc_connect(''.$dbname.'',$dbuser,$dbpwd);
J'ai des temps de réponse pourris, cela peut aller à 20s pour un simple select sur une table d'une dizaines de lignes(par contre quand j’accède directement à la base et que j'exécute la même requête j'ai pas ce pb, du coup cela ne peut pas être un pb réseau).

Quelqu'un aurait il une idée du probléme?

Re: Connexion ODBC AS400

Posté : 15 oct. 2016, 13:40
par @rthur
Bonjour

Pas simple de t'aider sur un problème comme celui ci...

Essaye de mettre des points d'arrêt ou d'afficher les timestamp entre chaque appel (connexion / query...) pour voir quelle fonction prend le + de temps.

Tu peux aussi utiliser wireshark pour analyser les appels réseau et tenter de trouver l'origine du problème.

Re: Connexion ODBC AS400

Posté : 17 oct. 2016, 11:48
par massmass
Merci du retour :D .
j'ai utilisé le timestamp et j'ai trouvé d'ou venait mon problème.
J'ai besoin de retourner le résultat en format JSON, donc j'appelle cette fct pour convertir le résultat, et c'est l’exécution de ce script qui prend du temp :
function print_result(&$cur) {

  $resl = Array();

  while($line = odbc_fetch_array($cur)) {
    array_push($resl,$line);
  }

  array_walk_recursive($resl, function(&$item, $key){
    if(!mb_detect_encoding($item, 'utf-8', true)){
		if( $item!=''){
			$item = utf8_encode($item);
		}
		else $item = trim($item,'');
      
	 
    }
  });

  echo json_encode($resl);
}
[
Une solution?

Re: Connexion ODBC AS400

Posté : 17 oct. 2016, 14:30
par moogli
salut,

tu pourrais faire la conversion utf-8 dans la boucle while histoire de gagner le temps de parcourt du tableau, mais je ne pense pas que cela soit super signification (à tester ça doute rien).

est ce qu'il n'est pas possible de paramètre la connexion pour que cela retourne de l'utf-8 ?

tu n'as pas beaucoup de marge de manœuvre pour réaliser la conversion.

@+

Re: Connexion ODBC AS400

Posté : 17 oct. 2016, 21:40
par Jc71
Bonsoir,

Si les données de ta base sont encodées en UTF8 tu as juste à t'assurer que le fichier de traitement PHP soit encodé en UTF-8 sans BOM pour que le retour JSON se fasse sans erreur.
Ensuite essaye de former ton retour avec un tableau associatif json_encode(array('a'=>0,'b'=>1, ...));

++

Re: Connexion ODBC AS400

Posté : 18 oct. 2016, 14:07
par massmass
Bonjour,

J'ai essayé sans la partie utf8, et le pb est le même donc c'est le odbc_fetch_array :?: