Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1858 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Script trop lent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script trop lent

n°701842
cinezone
Posté le 17-04-2004 à 19:10:57  profilanswer
 

Salut,
 
Comme travail de fin d'année je compte créer une web application permettant aux utilisateurs d'une entreprise d'avoir un historique des pages visitées.
Sachant que le proxy derrière est SQUID il faut que je mettent toutes ces données dans une table mysql pour pouvoir faire des requêtes dessu par la suite.
 
Alors voici mon code :  

Code :
  1. set_time_limit(0);
  2. $timestamp = array();
  3. $user = array();
  4. $url = array();
  5. $i=0;
  6. $handle = file("../log/access.log" ); /* Fichier utilisé */
  7. mysql_connect(MYSQL_ROOT , MYSQL_USER , MYSQL_PASSWORD);
  8. mysql_select_db("access" );
  9. foreach ($handle as $buffer) {
  10. $buffer = str_replace("     " , " " , $buffer); /* Suppression des espaces dans le fichier */
  11. $buffer = str_replace("    ", " " , $buffer);
  12. $buffer = str_replace("   ", " " , $buffer);
  13. $buffer = str_replace("  ", " " , $buffer); /* Fin Suppression */
  14. $data = explode(" " , $buffer);
  15. //$uid = $data[7];
  16. //$sites = $data[6];
  17. //$ipclient = $data[2];
  18. $datevisite = strftime("%Y-%m-%d" , $data[0]); /* date Unix (secondes depuis le 1er Janvier 1970)  vers date compréhensible */
  19. $heurevisite = strftime("%H:%M" , $data[0]);
  20. $urldecomp = parse_url($data[6]); /* Décomposition */
  21. $urldecomp = @$urldecomp['host']; /* de l'url */
  22. include("keywords_rules.php" );
  23. $info = mysql_query("INSERT INTO log VALUES ('' , '$data[7]' , '$datevisite' , '$heurevisite' , '$data[2]', '$urldecomp', '$data[6]' , '$sensible')" );
  24. if ($info) {
  25.  echo "Ligne $i : OK <br />";
  26. } else {
  27.  echo "<strong>Ligne $i : Problème </strong><br />";
  28. };
  29. $i++;
  30. };


 
Le script fonctionne parfaitement mais je trouve sont temps d'exécution trop long alors je fais appel à votre aide pour savoir si il y a pas moyen d'optimiser tout ça.
 
Merci d'avance.

mood
Publicité
Posté le 17-04-2004 à 19:10:57  profilanswer
 

n°701843
cinezone
Posté le 17-04-2004 à 19:12:17  profilanswer
 

Voici la structure d'un fichier log SQUID.

Code :
  1. 1079233348.078     32 172.16.14.37 TCP_MISS/304 194 GET http://194.78.90.171/visual/style.mp3 zobu DIRECT/194.78.90.171 -


Message édité par cinezone le 17-04-2004 à 19:12:39
n°701890
scull
MySCULL cay bon mangez en!
Posté le 17-04-2004 à 21:10:28  profilanswer
 

déjà cherche d'ou peu venir la surcharge.
affiche le temps de génération régulièrement pour savoir ou est ce que sa rame vraiment.

n°701895
cinezone
Posté le 17-04-2004 à 21:35:17  profilanswer
 

ça doit paraitre con mais comment on affiche le temps ?

n°701900
Taz
bisounours-codeur
Posté le 17-04-2004 à 21:50:52  profilanswer
 

Code :
  1. $buffer = str_replace("     " , " " , $buffer); /* Suppression des espaces dans le fichier */
  2.      $buffer = str_replace("    ", " " , $buffer);
  3.      $buffer = str_replace("   ", " " , $buffer);
  4.      $buffer = str_replace("  ", " " , $buffer); /* Fin Suppression */
  5.      $data = explode(" " , $buffer);


 
 
regex :o

n°702070
cinezone
Posté le 18-04-2004 à 11:52:54  profilanswer
 

Oué je veux bien le faire en regex mais j'ai jamais rien compris à ce truc même en lisant des tutoriaux.
Tu pourrais pas me donner le code et essayer de l'expliquer stp ? (je sais qu'ici on demande pas de code tout fait mais bon j'ai pas vraiment le choix)

n°702084
ratibus
Posté le 18-04-2004 à 12:26:47  profilanswer
 

Salut
 
le "include("keywords_rules.php" );" tu pourrais pas le mettre en dehors du foreach (il y a quoi dedans ?) ?
 
Sinon effectivement regexp pour traiter le fichier d'entrée

n°702096
cinezone
Posté le 18-04-2004 à 12:40:45  profilanswer
 

au fait keywords_rules.php contient ça
 

Code :
  1. <? if (strstr($data[6] , 'xxx')) { $sensible = 1; } elseif (strstr($data[6] , 'cul')) { $sensible = 1; } elseif (strstr($data[6] , 'anal')) { $sensible = 1; } elseif (strstr($data[6] , 'sex')) { $sensible = 1; } elseif (strstr($data[6] , 'porn')) { $sensible = 1; } elseif (strstr($data[6] , 'clito')) { $sensible = 1; } elseif (strstr($data[6] , 'adult')) { $sensible = 1; } elseif (strstr($data[6] , 'nudity')) { $sensible = 1; } elseif (strstr($data[6] , 'nude')) { $sensible = 1; } elseif (strstr($data[6] , 'hardcore')) { $sensible = 1; } elseif (strstr($data[6] , 'teen')) { $sensible = 1; } elseif (strstr($data[6] , 'gay')) { $sensible = 1; } elseif (strstr($data[6] , 'cum')) { $sensible = 1; } elseif (strstr($data[6] , 'voyeur')) { $sensible = 1; } elseif (strstr($data[6] , 'pussy')) { $sensible = 1; } elseif (strstr($data[6] , 'fuck')) { $sensible = 1; } elseif (strstr($data[6] , 'bondage')) { $sensible = 1; } elseif (strstr($data[6] , 'suck')) { $sensible = 1; } elseif (strstr($data[6] , 'tits')) { $sensible = 1; } elseif (strstr($data[6] , 'naked')) { $sensible = 1; } else { $sensible = 0; }; ?>


 
c'est pour vérifier si un utilisateur a été sur un site de Q en regardant les mots dans l'URL.
A mon avis que ça doit fortement ralentir le script mais je connais pas d'autre moyen pour faire cette vérification (je connais que IF ELSEIF et SWITCH)

n°702168
ratibus
Posté le 18-04-2004 à 14:23:29  profilanswer
 

remplace le include de keywords.php par cette ligne de code et dis moi si ça va plus vite :
 

Code :
  1. $sensible = preg_match("/xxx|cul|anal|sex|porn|clito|adult|nudity|nude|hardcore|teen|gay|cum|voyeur|pussy|fuck|bondage|suck|tits|naked/",$data[6]) ? 1 : 0;

n°702172
ratibus
Posté le 18-04-2004 à 14:27:39  profilanswer
 

Pour voir le temps d'exécution de ton script tu peux utiliser cette fonction :
 

Code :
  1. function getmicrotime() {
  2.     list($usec, $sec) = explode(" ",microtime());
  3.     return ((float)$usec + (float)$sec);
  4. }


 
Ensuite au début de ton script tu fait

Code :
  1. $script_start = getmicrotime();


 
et à la fin tu fais  

Code :
  1. echo sprintf("%.3f",getmicrotime()-$script_start).' secondes';


Message édité par ratibus le 18-04-2004 à 14:30:29
mood
Publicité
Posté le 18-04-2004 à 14:27:39  profilanswer
 

n°702181
cinezone
Posté le 18-04-2004 à 14:46:42  profilanswer
 

Merci pour vos réponses. Je testerai tout ça  ce soir, je vous tien au courant.

n°702236
cinezone
Posté le 18-04-2004 à 17:00:28  profilanswer
 

En effet ça va plus vite avec le preg_match();
 
Maitenant je cherche a remplacer

Code :
  1. $buffer = str_replace("     " , " " , $buffer);
  2. $buffer = str_replace("    ", " " , $buffer);
  3. $buffer = str_replace("   ", " " , $buffer);
  4. $buffer = str_replace("  ", " " , $buffer);


en regex avec la fonction preg_replace je crois mais je ne sais pas comment le faire.

n°702248
Taz
bisounours-codeur
Posté le 18-04-2004 à 17:29:03  profilanswer
 

bah il faut remplacer les \s+ par un " "

n°702614
cinezone
Posté le 19-04-2004 à 11:21:06  profilanswer
 

Voilà mon script avance de plus en plus mais je me pose encore des questions sur la différence entre eregi() et preg_match() qui ont l'air de faire exactement la même chose.

n°703273
ratibus
Posté le 19-04-2004 à 22:30:41  profilanswer
 

preg_match est plus rapide que ereg


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Script trop lent

 

Sujets relatifs
Action script et champ texte[JS] Can't run freed script
lancer un script automatiquement?lancer l'exécution d'un script VB distant
script shell pour concatener un ensemble de fichier.Script antileech - Facilement détournable ?
aide pour un script....il fait quoi mon script de débutant (sois-disant...)
[PHP] comment stopper l'éxecution d'un script ??? [résolu : exit()] 
Plus de sujets relatifs à : Script trop lent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR