Lenteur objets métiers en PHP

SOLVED

Bonjour,

Je me permets de poser ma question sur ce forum en espérant avoir un petit coup de main. 

Je développe des outils avec les objets métiers pour automatiser certaines tâches dans notre société, notamment l'import des commandes depuis notre site ecommerce.

Je travaille en langage PHP, sur un serveur vituel WampServer installé sur mon poste. J'ai créé des virtual host par exemple "h-t-t-p://outils.web" . Nous avons paramétré certains ordinateurs du réseau interne (via fichier hosts dans /system32) afin qu'ils ait accès à ces outils en tapant le virtual host dans leur navigateur internet. Cette solution nous permets d'actualiser les outils et développement seulement sur mon poste, et les rendre instantanément accessibles sur tous les postes paramétrés, sans avoir besoin d'installation ou mise à jour supplémentaire.  

Jusque là je développais avec le kit Odbc fourni par sage, et tout fonctionnait parfaitement, et rapidement. Sans avoir besoin de toucher aux services de WampServer.

Nous sommes passé aux objets métiers, car nous devons migrer notre version de sage (actuellement version 7.00) vers une version plus récente, et le kit odbc ne sera plus disponible. J'ai donc traduit tous les outils en langage objetMetier.

Lorsque j'exécute mon script (par exemple : "h-t-t-p://outils.web/monscript.php"), la connexion aux bases se fait bien, mes outils fonctionnent nikel (je les ai testé sur une base test), avec un temps d'exécution similaire au kit odbc.

Mais lorsque je souhaite les exécuter une seconde fois (soit le même script, soit un script différent mais utilisant toujours les objets métiers) alors le script mouline dans le vide. Si je redémarre les services de WampServer, alors le script refonctionne parfaitement.

Après plusieurs tests, il semble que ce soit la connexion aux bases qui mouline, comme si à la première exécution d'un script objetmétier, une connexion restait ouverte en cache et empêchait toute nouvelle connexion. Le redémarrage des services détruit très certainement ce cache ou cette connexion résiduelle, ce qui explique que les outils refonctionnent ensuite. 

Pourtant je clôture chaque script en détruisant les variables objets, en fermant les connexions aux bases compta et commerciale et en détruisant les variables objets de ces-dites connexions. 

Exemple d'un de mes codes de fermeture en fin de ce message. 

Pourriez vous m'aider à trouver d'où vient ce problème de fonctionnement ? Car j'aimerai que l'on puisse utiliser ces outils sans avoir besoin de redémarrer WampServer après chaque utilisation. Nous sommes 3 postes à devoir les utiliser et je ne peux pas redémarrer à chaque fois que l'un de nous utilise un des outils. J'ai vraiment cherché partout sur le net, sur ce forum. Mais malheureusement nous sommes très peu à utiliser PHP, et donc très peu d'aide. J'espère avoir donné toutes les infos pour vous permettre de comprendre le problème et peut-être de m'aider à trouver la solution.

D'avance je vous remercie pour votre temps.

Cordialement

Valerie

PS : au passage (et totalement hors sujet), y a t-il des dates prochainement pour une formation objets metiers ?

 Exemple de code de fermeture d'un des scripts outils : 

------->

/* KILL DES VARIABLES OBJETS UTILISEES DANS LE CODE
--------------------------------------------------------*/
/* Dans l'ordre d'imbrication des objets */

$objet_articleTarifQteCategorie = null;
unset($objet_articleTarifQteCategorie);

$objet_articleTarifCategorie = null;
unset($objet_articleTarifCategorie);

$objet_listeArticleTarifCategorie = null;
unset($objet_listeArticleTarifCategorie);

$objet_famille = null;
unset($objet_famille);

$objet_article = null;
unset($objet_article);

echo "<p class='ok'>Variables objets detruites</p>";


/* FERMETURE BASES OBJETS METIER
--------------------------------------------------------*/
try{
$baseCial->Close();
$baseCial = null;
unset($baseCial);
echo "<p class='ok'>Base commerciale fermee</p>";
$rapport .= "Base commerciale fermée";
} catch(Exception $e) {
echo "<p class='error'>Erreur lors de la fermeture de la base de donnees Commerciale (Ligne : ".$e->getLine().")<br />".$e->getMessage()."</p>";
}

try{
$baseCompta->Close();
$baseCompta = null;
unset($baseCompta);
echo "<p class='ok'>Base compta fermee</p>";
$rapport .= "Base compta fermée";
} catch (Exception $e) {
echo "<p class='error'>Erreur lors de la fermeture de la base de donnees Compta (Ligne : ".$e->getLine().")<br />".$e->getMessage()."</p>";
}

/* Check objet detruits
*/
if(!isset($baseCial) && !isset($baseCompta)){
echo "<p class='ok'>Les deux constantes BASES sont fermées.</p>";
}else{
echo "<p class='error'>Les constantes BASE sont encore actives.</p>";
}

Parents
  • Bonjour ,

    Faites-nous savoir si la réponse de Julien a été utile en la marquant comme vérifiée .

    Pour cela, cliquez sur  la ligne ‘Vérifier la réponse’.

    Cela aura pour effet de marquer la réponse en vert et de permettre aux autres membres de la communauté, ou aux personnes qui auraient également le besoin de voir que cela a fonctionné.

    Merci d'avoir utilisé la communauté.

    Yannick

Reply
  • Bonjour ,

    Faites-nous savoir si la réponse de Julien a été utile en la marquant comme vérifiée .

    Pour cela, cliquez sur  la ligne ‘Vérifier la réponse’.

    Cela aura pour effet de marquer la réponse en vert et de permettre aux autres membres de la communauté, ou aux personnes qui auraient également le besoin de voir que cela a fonctionné.

    Merci d'avoir utilisé la communauté.

    Yannick

Children