Bonjour a tou(te)s,
j'ai codé un petit petit module qui, à priori, bouffe trop de mémoire, quelqu'un pourrait il m'expliquer à quoi peut etre du un message du type :
a priori c'est consécutif à un appel de la fonction calculRisques qui pioche sur une table de 36000 Nuplets. Si qqun a la solution pour empêcher ça, je prends :Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3145699 bytes) in Unknown on line 0
voilà les codes :
traitementChoix, c'est le script qui va appeler le reste
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 <?php require_once("nUpletVille.php5"); require_once("emetteur.php5"); require_once("villeGeoloc.php5"); session_start(); require_once("cnx.php5"); require_once("mesFonctions.php5"); $_SESSION['choix']=$_POST['choix']; $_SESSION['cp']=$_POST["cp"]; $_SESSION['long'] = $_POST['long']; $_SESSION['lat'] = $_POST['lat']; $_SESSION['nomVille'] = $_POST['ville']; $_SESSION['leBonNuplet']; $_SESSION['i']; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN"> <html> <head> <title>module de calcul d'occupation des frequences</title> </head> <body> <form name="cp" method="post" action="traitementChoix.php5"> <label for="cp"> <?php if(isset($ErrorMessage)&&($ErrorMessage == "cp")){echo "Code postal de format incorrect : un nombre à cinq chiffres est requis";}elseif(isset($ErrorMessage)&&($ErrorMessage == "cpInexistant")){echo"Le code postal entré n'existe pas";} else{echo"Code Postal de la commune";} ?> </label> <input type="text" name="cp" id="cp"> <input type="submit" value="Chercher le code postal"/></form><br /><br /><br /> <form name="ville" method="post" action="traitementChoix.php5"><label for="ville"> <?php if(isset($ErrorMessage)&&($ErrorMessage == "ville")){echo "Ville de format incorrect : les caractères autres que alphabétiques accentués où non, espaces, apostrophes, traits d'union sont interdits";}else{echo"Nom de la commune";} ?> </label><input type="text" name="ville" id="ville"> <input type="submit" value="Chercher la ville"/></form><br /><br /><br /> <form name="longLat" method="post" action="traitementChoix.php5"><label for="latitude"> <?php if(isset($ErrorMessage)&&($ErrorMessage == "Latitude")){echo "latitude de format incorrect : une latitude est de type nombre à virgule";}else{echo"Latitude";} ?> </label><input type="text" name="latitude" id="latitude"><label for="longitude"> <?php if(isset($ErrorMessage)&&($ErrorMessage == "Longitude")){echo "latitude de format incorrect : une latitude est de type nombre à virgule";}else{echo"Longitude";} ?></label><input type="text" name="longitude" id="longitude"> <input type="submit" value="Chercher les coordonnées"/></form><br /><br /><br /> <?php if(isset($_SESSION['choix'])) {if (controleChoix()) {$_SESSION['long']=$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->longitude;$_SESSION['lat']=$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->latitude;$_SESSION['leBonNuplet'] = $_SESSION['lesNupletCorrespondant'][$_SESSION['choix']];calculeRisques(); } else{echo("mauvais choix, veuillez choisir un entier entre 0 et ".$_SESSION['lesNupletCorrespondant'][$_SESSION['max']]);}} elseif(isset($_SESSION['cp'])) {traitementCP();afficheTableau(); if(controleRempli()) { afficheFormulaireChoix();$_SESSION['leBonNuplet'] = $_SESSION['lesNupletCorrespondant'][$_SESSION['choix']];}} elseif(isset($_SESSION['nomVille'])){traitementVille();afficheTableau();if(controleRempli2()){afficheFormulaireChoix();$_SESSION['leBonNuplet'] = $_SESSION['lesNupletCorrespondant'][$_SESSION['choix']];}} elseif(isset($_SESSION['lat']) && isset($_SESSION['long'])){traitementLongLat();} ?> </body> </html>
mon fichier de fonctions mesFonctions.php5:
la classe nUpletVille :
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 <?php require_once("cnx.php5"); $_SESSION['vide'] = true; //************************************************* function controleCP() { if(!preg_match('`[0-9]{5,5}`',$_SESSION['cp'])){echo("entrez un nombre à cinq chiffres");return false;} else return true; } //************************************************** function remplisTableau() { $_SESSION['lesNupletCorrespondant'] = array(); $rawCp = mysql_query("select * from freq_listingcodes");//*************remplissage de $_SESSION['lesNupletCorrespondant'] = $_SESSION['cp']********** //$i = 0; while($row = mysql_fetch_array($rawCp, MYSQL_BOTH)) { $n = new nUpletVille($row["NomMin"],$row["NomMaj"],$row["CodePostal"],$row["INSEE"],$row["Region"],$row["Longitude"],$row["Latitude"],$row["Eloignement"]); if(strlen($n->codePostal==3)){$n->codePostal = "00".$n->codePostal;} elseif(strlen($n->codePostal==4)){$n->codePostal = "0".$n->codePostal;} if ($n->codePostal==$_SESSION['cp']){array_push($_SESSION['lesNupletCorrespondant'],$n);$_SESSION['vide'] = false;} /*echo("\$_SESSION['lesNupletCorrespondant'] au rang ".$i." = ".$_SESSION['lesNupletCorrespondant'][$i]->nomMaj); $i++;*/ } } //********************************************* function controleChoix() { if(isset($_SESSION['max'])&&isset($_SESSION['choix'])&&($_SESSION['choix']<=$_SESSION['max'])&&($_SESSION['choix']>=0)&&preg_match('`[0-9]{1,3}`',$_SESSION['choix'])){return true;} else {return false;} } //************************************** function traitementCP() { if (isset($_SESSION['cp'])) { if (controleCP()){remplisTableau(); return true; } else{return false;} } else{return false;} } //********************** function afficheTableau() { $_SESSION['i']=0; while(isset($_SESSION['lesNupletCorrespondant'][$_SESSION['i']])) { echo("Choix numéro ".$_SESSION['i']." : ".$_SESSION['lesNupletCorrespondant'][$_SESSION['i']]->nomMaj."<br />"); $_SESSION['i']++; } } //********************* function afficheFormulaireChoix() { $_SESSION['max'] = $_SESSION['i']-1; echo("<form name=\"choixCP\" method=\"post\" action=\"traitementChoix.php5\"><label for=\"choix\"> entrez un choix de 0 à ".$_SESSION['max']." </label><input type=\"text\" name=\"choix\" id=\"ville\"> <input type=\"submit\" value=\"Chercher la ville\"/></form><br />"); } //*************** function controleRempli() { if($_SESSION['vide']){echo ("le code postal ".$_SESSION['cp']." est inconnu");return false;}else {return true;} } //*************************** function remplisTableau2() { $_SESSION['lesNupletCorrespondant'] = array(); $rawCp = mysql_query("select * from freq_listingcodes"); while($row = mysql_fetch_array($rawCp, MYSQL_BOTH)) { $n = new nUpletVille($row["NomMin"],$row["NomMaj"],$row["CodePostal"],$row["INSEE"],$row["Region"],$row["Longitude"],$row["Latitude"],$row["Eloignement"]); if ((strstr($n->nomMaj,$_SESSION['nomVille'])!=false)||(strstr($n->nomMin,$_SESSION['nomVille'])!=false)){array_push($_SESSION['lesNupletCorrespondant'],$n);$_SESSION['vide'] = false;} } } //******************* function controleVille() { if(!preg_match('`[a-zA-Z]{2,50}`',$_SESSION['nomVille'])){echo("Entrez un nom de ville valide");return false;} else return true; } //********************** function traitementVille() { if (isset($_SESSION['nomVille'])) { if (controleVille()){remplisTableau2(); return true; } else{return false;} } else{return false;} } //*************** function controleRempli2() { if($_SESSION['vide']){echo ("la chaine de caractères ".$_SESSION['nomVille']." n'est contenue dans aucun nom de ville");return false;}else {return true;} } //********************* function calculeRisques() { $_SESSION["lesEmetteurs"] = array(); $rawEmetteur = mysql_query("select * from freq_emtv_ll"); while ($row = mysql_fetch_array($rawEmetteur,MYSQL_BOTH)) { $e = new emetteur($row["Indice"],$row["Latitude"],$row["Longitude"],$row["Puissance"],$row["type"],$row["canal"]); array_push($_SESSION["lesEmetteurs"],$e); $e->calculeDistanceNuplet($_SESSION['leBonNuplet']); $e->calculePrecoef(); echo("emetteur numero ".$e->indice." ayant ".$e->longEmetteur." de longitude et ".$e->latEmetteur." de latitude, puissance = ".$e->puissanceEmetteur.". ".$e->distance." de distance avec ".$_SESSION["leBonNuplet"]->nomMaj." , le preCoef resultant est donc : ".$e->preCoef."</br>"); } } ?>
la classe emetteur :
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 <?php class nUpletVille { public $nomMin; public $nomMaj; public $codePostal; public $INSEE; public $region; public $longitude; public $latitude; public $eloignement; //Constructeur de l'objet public function __construct($nomMin,$nomMaj,$codePostal,$INSEE,$region,$longitude,$latitude,$eloignement) { $this->nomMin = $nomMin; $this->nomMaj = $nomMaj; $this->codePostal = $codePostal; $this->INSEE = $INSEE; $this->region = $region; $this->longitude = $longitude; $this->latitude = $latitude; $this->eloignement = $eloignement; } //Destructeur de l'objet public function __destruct() {} public function convertNupletToGeo($v) { $this->nomMaj = $v->nomVille; $this->longitude = $v->longVille; $this->latitude = $v->latVille; } } ?>
le fichier cnx ne contient qu'un mysql_connect.
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 <?php class emetteur { public $latEmetteur; public $longElmetteur; public $puissanceEmetteur; public $distance; public $preCoef; public $indice; public $type; public $dLat; public $dLong; public $cm; public $risque; public $canal; public function __construct($indice,$lat,$long,$puissance,$type,$canal) { $this->indice = $indice; $this->latEmetteur = $lat; $this->longEmetteur = $long; $this->puissanceEmetteur = $puissance; $this->type = $type; $this->canal = $canal; } function calculeDistance($ville) { $this->dLat = 111.5*(($ville->latVille)-($this->latEmetteur)); $this->dLong = 77 * (($ville->longVille)-($this->longEmetteur)); $this->distance = sqrt(pow($this->dLat,2)+pow($this->dLong,2)+0.1); } function calculeDistanceNuplet($n) { $this->dLat = 111.5*(($n->latitude)-($this->latitude)); $this->dLong = 77 * (($n->longitude)-($this->longitude)); $this->distance = sqrt(pow($this->dLat,2)+pow($this->dLong,2)+0.1); } function calculePrecoef() { if(isset($this->type)){if ($this->type=="TNT"){$this->cm = 10;} else{$this->cm = 1;}} else{$this->cm = 1;} $this->preCoef = $this->cm*(($this->puissanceEmetteur)/pow($this->distance,2)); } } ?>
la classe villeGeoloc en fait je m'en sers pas donc je mets pas le code.
Merci aux éventuels contributeurs, toute aide est la bienvenue
Partager