Bonjour,

J'ai développé un script PHP qui lit un fichier xml et charge les données dans une base de données MySql.
Le script s'exécute correctement jusqu'à la fin, enregistre un log dans la base pour mémoriser l'heure de fin et le nombre de séjour enregistrés, mais à la fin il "tourne dans le vide" et je ne sais pas du tout ce qu'il fait ni de quoi ça vient. Le serveur httpd (Apache sous Linux) se met alors à consommer de la mémoire et des ressources CPU (jusqu'à 80%). Le navigateur continue à chager la page alors que le script est terminé....

J'ai essayé de fixer un max_execution_time ça ne change rien, j'ai aussi mis un exit à la fin du script mais il continue à "tourner". Les logs montrent que le script ne boucle pas puisqu'il ne recommence pas l'exécution complète du script (vidage base, chargement, mémorisation des logs en fur à mesure de l'exécution).

Pour info :
PHP 4.2.3
MySql 3.23.39

Voici la portion de code de chargement simplifié :

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
$filename = "nomxml.xml";
$tmpexecdeb=getmicrotime();
$tMo=floor(filesize($filename)/1048576);
 
$limite_basse=0; // limite minimum en Mo pour mettre à jour les flux
 
$nbsejinsert=0; // nb de séjours insérés
$nbvoyainsert=0; //nb de voyagistes insérés
 
/* On vide les tables séjours et voyagistes */
mysql_query("DELETE FROM lesvoyagistes");
mysql_query("DELETE FROM lessejours");
 
if ($tMo>=$limite_basse){		
		//echo "Limite Basse dépassée, début du parsage enclenché.<br>";
		$contenuxml = implode("",file($filename));
		$parser = xml_parser_create();
		xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
		xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
		xml_parse_into_struct($parser,$contenuxml,$valeurs,$lesindex);
		xml_parser_free($parser);
 
		$nb=count($valeurs);
		$count=0;
 
		$messdebug=$nb. " tableaux de tags lus dans le fichier XML.";
		$req_insert_log="INSERT INTO logs(log, dateheure) VALUES('$messdebug','".Date("Y-m-d H:i:s")."');";
		$res=mysql_query($req_insert_log);
 
		//foreach($valeurs as $tags){
		for ($i=0; $i<$nb;$i++){
			$tags=$valeurs[$i];
			if ($tags['tag']=="tagexemple"){
                            /* Traitement du tag 'tagexemple' */
                        }
			/* .... ICI traitement de tous les tags .... */
			else if (($tags['tag']=='url') && ($tags['type']=='complete'))	{
					$url=$tags['value'];
					$req_insert_voyagiste='ma requete insertion voyagiste';
					mysql_query($req_insert_voyagiste);
					$nbvoyainsert++;
			}
			else if (($tags['tag']=="voyagistes") && ($tags['type']=='open')) {
					$req_insert_sejour='ma requete insertion sejour;';
					mysql_query($req_insert_sejour);
					$nbsejinsert++;
					//echo $nbsejinsert." séjours insérés<br>";
			}//fin si on commence à lire la liste des voyagistes
 
		}//fin boucle sur les tags
}// fin si limite basse dépassée
 
$messdebug="Boucle des insertions terminée.";
$req_insert_log="INSERT INTO logs(log, dateheure) VALUES('$messdebug','".Date("Y-m-d H:i:s")."');";
$res=mysql_query($req_insert_log);
 
/* Contrôles de fin de procédure */
$tmpexec=getmicrotime()-$tmpexecdeb;
$min=floor($tmpexec/60);
$sec=floor($tmpexec-($min*60));
$speed=floor((filesize($filename)/1024)/$tmpexec);
 
$rapport_log="Taille du fichier : ".$tMo." Mo<br>";
$rapport_log.= $nbsejinsert . " séjours insérés.<br>";
$rapport_log.= $nbvoyainsert . " voyagistes insérés.<br>";
$rapport_log.= "Durée : " . $min . " min ".$sec." sec.<br>";
 
/* Enregistrement du log */
$req_insert_log="INSERT INTO logs(log, dateheure) VALUES('$rapport_log','".Date("Y-m-d H:i:s")."');";
$res=mysql_query($req_insert_log);
 
$messdebug="Enregistrement du log terminé.";
$req_insert_log="INSERT INTO logs(log, dateheure) VALUES('$messdebug','".Date("Y-m-d H:i:s")."');";
$res=mysql_query($req_insert_log);
Si vous avez un idée... Merci beaucoup d'avance parceque là je ne vois vraiment plus dans quelle direction chercher...