Pour la énième fois je demande de l'aide pour mon problème et j'éspère de tout coeur que vous pourrez m'aider :/
J'ai un script de téléchargement qui permet de limiter les téléchargements à 1 par ip et à 60 personnes qui téléchargent en même temps (ou plus)
Mais ce script qui fonctionnait parfaitement sur mon mutualisé pose problème sur mon serveur.
Mes infos serveur : Rehat, Apache 1.3, Mysql 4.3, PHP 4
lors de la demande de DL le lancement de ce dernier peut prendre jusqu'à 2 minutes (test effectués alors que j'étais seul sur le serveur)
Pour moi c'est la faute à mysql, il y a un problème lors d el'insertion de l'ip dans la table et ça prend du temps (car via un lien direct aucun soucis :/)
Et parfois même les DL se coupent avant la fin , ce qui est bizar c'est que c'est juste certains jours, comme si une tâche cron était responsable.
Voila une partie du script, la class download.php, il doit y avoir un moyen d'optimiser ces requêtes pour les accélérer :
<?php
/**
* Classe "Download"
* Sun Apr 09 20:41:39 CEST 2006
**/
class download {
/**
* Définitions des membres
**/
var $id;
var $ip;
var $date;
/**
* Constructeur
**/
function download($ip=0,$db_conn=null){
if($ip>0) {
$this->id=$ip;
$this->load($db_conn);
} else {
$this->id='';
$this->ip='';
$this->date='';
}
}
/**
* Méthode pour l'enregistrement dans la base
**/
function insert($db_conn) {
$req=<<<SQL
INSERT INTO ddl_tales_of_phantasia SET date=NOW(),
ip='$this->ip'
SQL;
$qres=mysql_query($req,$db_conn);
if(!$qres) return FALSE;
else {
$this->id=mysql_insert_id($db_conn);
return TRUE;
}
}
/**
* Méthode pour la mise a jour dans la base
**/
function update($db_conn) {
$req=<<<SQL
UPDATE ddl_tales_of_phantasia SET
ip='$this->ip',
date='$this->date',
WHERE id=$this->id
SQL;
$qres=mysql_query($req,$db_conn);
if(!$qres) return FALSE;
else return TRUE;
}
/**
* Méthode de suppression
**/
function remove($db_conn) {
$req=<<<SQL
DELETE FROM ddl_tales_of_phantasia WHERE id=$this->id LIMIT 1
SQL;
$qres=mysql_query($req,$db_conn);
if($qres) return FALSE;
else return TRUE;
}
/**
* Méthode de chargement
**/
function load($db_conn) {
$req=<<<SQL
SELECT * FROM ddl_tales_of_phantasia WHERE id=$this->id LIMIT 1
SQL;
$qres=mysql_query($req,$db_conn);
if(!$qres) return FALSE;
else {
$tmp=mysql_fetch_array($qres);
if($tmp && count($tmp)>0) {
foreach($tmp as $elt => $val) $this->$elt=$val;
return TRUE;
}
}
}
/**
* Méthode qui va récuperer les enregistrements
**/
function GetLst($db_conn){
$req=<<<SQL
SELECT id FROM ddl_tales_of_phantasia ORDER BY date DESC
SQL;
$qres=mysql_query($req,$db_conn);
$ret=array();
if(!$qres) return FALSE;
else {
while($buff=mysql_fetch_array($qres)){
if($buff && count($buff)>0){
$ret[]=new download($buff['id'],$db_conn);
}
else return FALSE;
}
}
return $ret;
}
/**
* Méthode qui va charger l'enregistrement par l'ip de la personne
**/
function loadByIp($db_conn) {
$req=<<<SQL
SELECT * FROM ddl_tales_of_phantasia WHERE ip='$this->ip' LIMIT 1
SQL;
$qres=mysql_query($req,$db_conn);
if(!$qres) return FALSE;
else {
$tmp=mysql_fetch_array($qres);
if($tmp && count($tmp)>0) {
foreach($tmp as $elt => $val) $this->$elt=$val;
return TRUE;
}
}
}
/**
* Méthode qui va récuperer le nombre de fichier en téléchargement
**/
function GetNbrDownload($db_conn){
$req=<<<SQL
SELECT COUNT(*) as nb_d FROM ddl_tales_of_phantasia
SQL;
$qres=mysql_query($req,$db_conn);
if(!$qres) return FALSE;
else {
$buff=mysql_fetch_array($qres);
if($buff && $buff['nb_d']!=0) return $buff['nb_d'];
else return 0;
}
}
/**
* Méthode qui va vérifier la liste des gens qui téléchargent.
**/
function Verif($lst,$db_conn){
$date_now=date("Y-m-d H:i:s");
foreach($lst as $dl){
$date_tmp=explode(' ',$dl->date);
list($annee,$mois,$jours) = explode('-', $date_tmp[0]);
list($heure, $minute, $seconde) = explode(':', $date_tmp[1]);
$date_dl=date("Y-m-d H:i:s", mktime($heure, $minute+_DEL_TEMPS_, $seconde, $mois, $jours, $annee));
if($date_dl<$date_now) {
$dl_del=new download(0,null);
$dl_del->id=$dl->id;
$dl_del->remove($db_conn);
}
}
}
}
?>
Merci d'avance pour votre aide !Cordialement.