IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Fatal error : allocation de mémoire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut [Système] Fatal error : allocation de mémoire
    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

  2. #2
    Membre du Club Avatar de bodysplash007
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 154
    Points : 58
    Points
    58
    Par défaut
    Euh salut en fait j'ai eu un prob similaire au tien, j'ai eu des fatal error avec des allocations de memoire. Mais dans mon cas c'était a l'insertion de photo, si ton site des deja sur le net comme est le mien c'est peut etre un prob d'hébergeur, car moi depuis que j'ai changé d'hebergeur, il accepte mes grandes photos foireuses et ne m'affiche plus de fatal error.

    J'espere que ça a pu t'aider un peu

  3. #3
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Le problême est mal exposé, il manque les détails de configuration, les versions des systêmes utilisés etc ...
    Je me lance quand même : l'option de php memory_limit est modifiable dans php.ini, ou reglable dans un fichier de configuration http de dossier : ce que je recommande (example : .htaccess), ou peut-être avec ini_set().
    Mais je sens que l'hébérgement est effectivement du type Happy-Meal(tm).

Discussions similaires

  1. Problème d'allocation de mémoire: Fatal error: Allowed memory
    Par Arget dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/09/2011, 07h55
  2. [Système] fatal error getstat() mise en ligne
    Par midnnight dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2008, 18h27
  3. Réponses: 3
    Dernier message: 30/11/2006, 20h54
  4. [Système] Fatal error : main ()
    Par westpc dans le forum Langage
    Réponses: 17
    Dernier message: 22/10/2006, 12h02
  5. Réponses: 4
    Dernier message: 21/07/2006, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo