Problème centre de téléchargement en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème centre de téléchargement en php

par Cyrano » 20 sept. 2006, 21:10

Je n'ai pas trop regardé les détails du code, mais il serait peut-être judicieux de regarder les logs, voire d'activer si tu y as accès les logs de requêtes lentes de MySQL pour voir si ça viendrait pas dune des requête spécifique... :-k

par S@dMad » 20 sept. 2006, 20:22

Pardon, il s'agit de mysql 4.1.13 ;)

Et il s'agit de ce serveur : http://www.ovh.com/fr/produits/superplan.xml

Problème centre de téléchargement en php

par S@dMad » 20 sept. 2006, 20:19

Bonjour,

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.