Connexion ODBC AS400

Petit nouveau ! | 3 Messages

14 oct. 2016, 13:29

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?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 oct. 2016, 13:40

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.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

17 oct. 2016, 11:48

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?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 oct. 2016, 14:30

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.

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 25 Messages

17 oct. 2016, 21:40

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, ...));

++
Architecte de données & applications web
MCSE Data Management & Analytics

Petit nouveau ! | 3 Messages

18 oct. 2016, 14:07

Bonjour,

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