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 :

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3145699 bytes) in Unknown on line 0
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 :

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:
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 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
 
<?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;
		}
}
 ?>
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
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));
		}	
}
?>
le fichier cnx ne contient qu'un mysql_connect.

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