11-11-2006, 05:36 PM
Hello à tous!
un petit mot parce que la je desespere......
J'ai tout tenté pour améliorer les performances de traitement:
- rajouter des sleep
- utiliser une base de données distante
- changer mes requetes....
Mais au final, rien n'y change, je dépasse les 200s autorisées en base et je sors en erreur.....
donc voila mon code. J'utilise des classes externes pas trop dures a saisir... normalement vous devriez etre capable de comprendre... si quelqu'un a des idées.....
un petit mot parce que la je desespere......
J'ai tout tenté pour améliorer les performances de traitement:
- rajouter des sleep
- utiliser une base de données distante
- changer mes requetes....
Mais au final, rien n'y change, je dépasse les 200s autorisées en base et je sors en erreur.....
donc voila mon code. J'utilise des classes externes pas trop dures a saisir... normalement vous devriez etre capable de comprendre... si quelqu'un a des idées.....
Code PHP :
<?php
/**
* fichier galaxie.class.php du projet starwars
* Créé le 20 août 2006 à 22:08:48
* @author Alexandre DUCROCQ <nivren@wanadoo.fr>
* @version 1.0
* @package planete
*
*
*/
/* chemin relatif vers les classes à tester*/
$path_to_classes = '../controller/';
/**
* inclusion de la classe mère
*/
require_once($path_to_classes . 'planete.class.php');
/**
* classe de gestion des planetes.
*/
class galaxie
{
/**
* constructeur de la galaxie
*/
function __construct($db='',$numero_galaxie)
{
if ($db == '')
{
global $db_exploit;
$db = $db_exploit;
}
$this->db = $db;
$this->galaxie = $numero_galaxie;
}
/**
* calcul du nombre de soleils
*/
function calculate_nb_sun()
{
$variable=rand(0,99);
if (($variable >=0)&&($variable<=69))
{
$this->nbsun=1;
}
else if (($variable >69)&&($variable<=89))
{
$this->nbsun=2;
}
else if (($variable >89)&&($variable<=99))
{
$this->nbsun=3;
}
}
/**
* calcul du nombre d'asteroides
*/
function calculate_nb_asteroide()
{
$this->nbasteroide=rand(50,100);
}
/**
* calcul du nombre de planetes
*/
function calculate_nb_planete()
{
$this->nbplanete=rand(100,300);
}
/**
* calcul de la taille d'un soleil
*/
function calculate_taille_sun()
{
$this->taille=rand(5,9);
}
/**
* calcul de la taille d'une planete
*/
function calculate_taille_planete()
{
$this->taille=rand(1,5);
}
/**
* evaluation de la possibilite de placer un soleil ou une planete
**/
function evaluate_coord()
{
$contenu="SELECT * FROM `tbl_planete` WHERE `galaxie`=".$this->galaxie." AND (`coordonnee_x` - ".$this->coordonnee_x.") * ( `coordonnee_x` - ".$this->coordonnee_x." ) + ( `coordonnee_y` - ".$this->coordonnee_y." ) * ( `coordonnee_y` - ".$this->coordonnee_y." ) <= ( `taille` + ".$this->taille." ) * ( `taille` + ".$this->taille." ) ";
echo "SELECT * FROM `tbl_planete` WHERE `galaxie`=".$this->galaxie." AND (`coordonnee_x` - ".$this->coordonnee_x.") * ( `coordonnee_x` - ".$this->coordonnee_x." ) + ( `coordonnee_y` - ".$this->coordonnee_y." ) * ( `coordonnee_y` - ".$this->coordonnee_y." ) <= ( `taille` + ".$this->taille." ) * ( `taille` + ".$this->taille." ) <br>";
$res = $this->db->query($contenu);
if ($this->db->sql_num_res[$res] != "0")
{
return false;
break;
}
return true;
break;
}
/**
* calcul de la position d'un soleil
*/
function position_sun()
{
$rand_min=$this->taille;
$rand_max= 99 - ($this->taille);
$this->coordonnee_x=rand($rand_min,$rand_max);
$this->coordonnee_y=rand($rand_min,$rand_max);
$state=false;
if ( $this->nbsun > 1 )
{
while ($state==false)
{
$state=$this->evaluate_coord();
if ($state==true)
{
break;
}
else
{
$this->coordonnee_x=rand($rand_min,$rand_max);
$this->coordonnee_y=rand($rand_min,$rand_max);
}
}
}
}
/**
* calcul de la position d'une planete en découpage en quart ^^
*/
function position_planete()
{
$MAX=99-$this->taille;
echo "dans position planete<br>";
$state=false;
while ($state==false)
{
echo "dans la boucle while<br>";
$state=$this->evaluate_coord();
if ( $state==true )
{
echo "<br><br>VALIDE<br><br>";
break;
}
else
{
if ( $this->coordonnee_x < $MAX )
{
echo "les coord de x sont inferieur à 99<br>";
$this->coordonnee_x=$this->coordonnee_x+1;
}
else
{
$this->coordonnee_x=$this->taille;
$this->coordonnee_y=$this->coordonnee_y+1;
}
if (( $this->coordonnee_x == $MAX )&&( $this->coordonnee_y == $MAX ))
{
$this->planetemax="true";
echo "<br>ON Y EST<br>";
break;
}
}
}
}
/**
* calcul de la position d'un champ d'asteroides
*/
function position_asteroide()
{
$this->coordonnee_x=rand(0,99);
$this->coordonnee_y=rand(0,99);
$state=false;
while ($state==false)
{
$state=$this->evaluate_coord();
if ($state==true)
{
break;
}
else
{
$this->coordonnee_x=rand(0,99);
$this->coordonnee_y=rand(0,99);
}
}
}
/**
* fonction d'insertion d'une planete dans la base galaxie
*/
function insert_planete()
{
//insertion d'une planete en base
$planete = new planete($this->db);
$id=$planete->db->get_free_id("id","tbl_planete");
$planete->set("id",$id);
$planete->set("genre",$this->genre);
$planete->set("nom",$this->nom);
$planete->set("taille",$this->taille);
$planete->set("type",$this->type);
$planete->set("galaxie",$this->galaxie);
$planete->set("peuplade",$this->peuplade);
$planete->set("coordonnee_x",$this->coordonnee_x);
$planete->set("coordonnee_y",$this->coordonnee_y);
$planete->save();
}
/**
* fonction qui définit les paramètres spécifiques a un soleil
*/
function define_sun()
{
$this->genre="soleil";
$this->nom="soleil";
$this->type="soleil";
$this->peuplade="none";
}
/**
* fonction qui définit les paramètres spécifiques a un champ d'astéroide
*/
function define_asteroide()
{
$this->genre="asteroide";
$this->nom="asteroide";
$this->type="quadrinium";
$this->peuplade="none";
$this->taille="0";
}
/**
* fonction qui définit les paramètres spécifiques a un champ d'astéroide
*/
function define_planete()
{
$this->genre="planete";
$this->nom="planete";
$this->type="herbe";
$this->peuplade="ewok";
$this->coordonnee_x=$this->taille;
$this->coordonnee_y=$this->taille;
}
/**
* fonction qui définit le type d'une planete: dépend d'un random et de la distance par rapport au soleil'
*/
function define_type_planete()
{
}
/**
* fonction qui définit la population d'une planete: dépend du type de la planete
*/
function define_peuplade_planete()
{
}
/**
* fonction qui génère une galaxie
*/
function generate()
{
//calcul du nombre de soleils
$this->calculate_nb_sun();
echo "<br><br><br>nombre de soleils = ".$this->nbsun."<br><br><br>";
for ($sun=1;$sun<=$this->nbsun;$sun++)
{
//définit qu'il s'agit d'un soleil
$this->define_sun();
//calcule la taille d'un soleil
$this->calculate_taille_sun();
//place le soleil
$this->position_sun();
//insere le soleil
$this->insert_planete();
}
//calcul du nombre de champs d'asteroides
$this->calculate_nb_asteroide();
for ($asteroide=1;$asteroide<=$this->nbasteroide;$asteroide++)
{
//définit qu'il s'agit d'un champ d'asteroide
$this->define_asteroide();
//place le champ d'asteroide'
$this->position_asteroide();
//insere le champ d'asteroide
$this->insert_planete();
}
//calcul du nombre de planetes
for ($taille=5;$taille>=1;$taille--)
{
$this->taille=$taille;
//définit qu'il s'agit d'une planete
$this->define_planete();
$this->planetemax="false";
while ($this->planetemax == "false")
{
//place la planete
$this->position_planete();
//insere la planete
$this->insert_planete();
}
sleep(10);
}
echo "fin";
}
}
?>
Merci d'avance....
Joshua