[PHP] Problème de Parsing :(((

Problème de Parsing :((( [PHP] - Programmation

Marsh Posté le 24-06-2002 à 12:55:16    

Hello a tous :hello:
 
Je viens de me rendre compte d'un truc aujourd'hui :??:
Je suis en train de faire un forum, et quand on poste un message ENORME, ca rame, ca rame, ca rame pour afficher ...
 
Et je me suis rendu compte que ca venait du code pour parser les smilies, les url, etc etc ...
 
Un flood enorme (400 Ko a tirer de la base MySQL) prend environ 7s a s'afficher avec le parsage des smilies, et autre ... :(
Sans parsage, ca met 0.1 s ...
 
Au passage, le code est ds une boucle WHILE, et je peux pas faire autrement :(
 
Y aurait pas un truc pour optimiser ce code ??? :??:
 
Merchi a tous :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 12:55:16   

Reply

Marsh Posté le 24-06-2002 à 13:08:07    

Pkoi tu fais un parsing pour ça ?
Un simple Erg_replace est suffisant non ?

Reply

Marsh Posté le 24-06-2002 à 13:13:25    

Format_C a écrit a écrit :

Pkoi tu fais un parsing pour ça ?
Un simple Erg_replace est suffisant non ?  




 
Heu oue :)
Ptete que je me suis mal exprimé alors :)
 
Voila mon code :  
<?
$textepost = nl2br(stripslashes(htmlentities($data[texte])));  
$textepost = preg_replace('/(\[url)([^\]]*)\](.*?)(\[\/url\])/',"<A href='\\3'>\\3</A>", $textepost);
$textepost = eregi_replace("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)","<A HREF=\"mailto:\\1\">\\1</A>", $textepost);
$textepost = ereg_replace("[ ]{2,}", "", $textepost);
 
$textepost = eregi_replace("([a-z0-9]{90})","\\1<br>",$textepost);
$textepost = str_replace("

Citation :

","<hr width=\"75%\" align=\"left\"><i>", $textepost);
$textepost = str_replace("

","</i><hr width=\"75%\" align=\"left\">", $textepost);
$textepost = str_replace("[img]","<img src=", trim($textepost));
$textepost = str_replace("[/img]",">", trim($textepost));
$textepost = str_replace("","<b>", $textepost);
$textepost = str_replace("
","</b>", $textepost);
$textepost = str_replace("","<i>", $textepost);
$textepost = str_replace("
","</i>", $textepost);
$textepost = str_replace("","<u>", $textepost);
$textepost = str_replace("
","</u>", $textepost);
$textepost = str_replace("[font color=red]","<font color=#FF0000>", $textepost);
$textepost = str_replace("[/font]","</font>", $textepost);
$textepost = str_replace("[defile]","<marquee>", $textepost);
$textepost = str_replace("[/defile]","</marquee>", $textepost);
$textepost = str_replace("

  • ","<li>", $textepost);

$textepost = str_replace(":)","<img src=\"images/smilies/smile.gif\">", $textepost);
$textepost = str_replace(":D","<img src=\"images/smilies/biggrin.gif\">", $textepost);
$textepost = str_replace(":(","<img src=\"images/smilies/frown.gif\">", $textepost);
$textepost = str_replace(";)","<img src=\"images/smilies/clin.gif\">", $textepost);
$textepost = str_replace(":ange:","<img src=\"images/smilies/ange.gif\">", $textepost);
$textepost = str_replace(":classe:","<img src=\"images/smilies/classe.gif\">", $textepost);
$textepost = str_replace(":??:","<img src=\"images/smilies/confused.gif\">", $textepost);
$textepost = str_replace(":cry:","<img src=\"images/smilies/cry.gif\">", $textepost);
$textepost = str_replace(":dodo:","<img src=\"images/smilies/dodo.gif\">", $textepost);
$textepost = str_replace(":fou:","<img src=\"images/smilies/fou.gif\">", $textepost);
$textepost = str_replace(":fuck:","<img src=\"images/smilies/fuck.gif\">", $textepost);
$textepost = str_replace(":grr:","<img src=\"images/smilies/grr.gif\">", $textepost);
$textepost = str_replace(":eek:","<img src=\"images/smilies/eek.gif\">", $textepost);
$textepost = str_replace(":heink:","<img src=\"images/smilies/heink.gif\">", $textepost);
$textepost = str_replace(":hello:","<img src=\"images/smilies/hello.gif\">", $textepost);
$textepost = str_replace(":o","<img src=\"images/smilies/ho.gif\">", $textepost);
$textepost = str_replace(":jap:","<img src=\"images/smilies/jap.gif\">", $textepost);
$textepost = str_replace(":kaola:","<img src=\"images/smilies/kaola.gif\">", $textepost);
$textepost = str_replace(":lol:","<img src=\"images/smilies/lol.gif\">", $textepost);
$textepost = str_replace(":love:","<img src=\"images/smilies/love.gif\">", $textepost);
$textepost = str_replace(":na:","<img src=\"images/smilies/na.gif\">", $textepost);
$textepost = str_replace(":non:","<img src=\"images/smilies/non.gif\">", $textepost);
$textepost = str_replace(":rolleyes:","<img src=\"images/smilies/rolleyes.gif\">", $textepost);
?>
 
 
Et tout ca, c ds un WHILE, donc pour chaque message, il doit se retapper tout ca :(


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 13:16:00    

Ptete que tu devrais faire une fonction aulieu de passer par cette vilaine boucle ;)

Reply

Marsh Posté le 24-06-2002 à 13:16:44    

Format_C a écrit a écrit :

Ptete que tu devrais faire une fonction aulieu de passer par cette vilaine boucle ;)  




 
Ha comment ca ?
J'suis un peu newbie :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 13:23:41    

Reply

Marsh Posté le 24-06-2002 à 13:24:54    

Oki, merchi bien, je vais aller lire tout ca :) ;) :jap:


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 13:34:58    

Ca y est, je viens lire :)
C un peu comme en JS ce systeme de fonctions ;)
 
En gros, je vois pas trop ce que ca donnerais :(
 

Code :
  1. functun parse (?, ? , ?)
  2. {
  3. .......
  4. }


 
Mais cette function sera tjs ds le WHILE, donc ca changera rien non ? :??: ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 13:45:54    

function ta_fonction ($Textepost)
 
Ben tente, de toute façon c'est plus propre :)

Reply

Marsh Posté le 24-06-2002 à 13:53:53    

Format_C a écrit a écrit :

function ta_fonction ($Textepost)
 
Ben tente, de toute façon c'est plus propre :)




 
Oki, je v tester :)
 
Donc, ca donne :
function parse ($textepost)
{
$textepost = nl2br(stripslashes(htmlentities($data[texte])));  
$textepost = preg_replace('/(\[url)([^\]]*)\](.*?)(\[\/url\])/',"<A href='\\3'>\\3</A>", $textepost);
etc etc etc
}
 
 ? :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 13:53:53   

Reply

Marsh Posté le 24-06-2002 à 14:06:10    

non max lol
A chaque $data['texte'] tu remplace par ce qu'il i a en argument à ta fn.

Reply

Marsh Posté le 24-06-2002 à 14:06:49    

Et pour les smilies, c pas bo du tout ce que tu fais mdr.
Regarde Joce nous a donné sa fonction qui est bien + belle et optimisée

Reply

Marsh Posté le 24-06-2002 à 14:09:59    

Je@nb a écrit a écrit :

non max lol
A chaque $data['texte'] tu remplace par ce qu'il i a en argument à ta fn.




 
Rho, g trop du mal ce matin ; merde il est 14H10 :D
Je comprends pu rien :D
 
v voir la fonction de Joce alors :D ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 14:15:02    

Je trouve pas le code de Joce :(
C t ds kel topic ? :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 14:19:41    

qd tu fais un fonction, tu as des arguments, des traitements et une valeur de retour.
 
fonction simple :
[fixed]function carre ($nb) {
$carre = $nb*$nb;
return $carre;
}
et pour l'utiliser par exemple tu fais : echo carre(2) et ça va afficher 4 ou si tu prend ché pas à partir d'une base de donnée : echo carre($data['test']);

Reply

Marsh Posté le 24-06-2002 à 14:19:53    

Pour le topic v te chercher ça

Reply

Marsh Posté le 24-06-2002 à 14:42:15    

up

Reply

Marsh Posté le 24-06-2002 à 14:42:58    

Jté mis la fn pour remplacer les smileys et les récup d'une BDD sur ICQ

Reply

Marsh Posté le 24-06-2002 à 14:43:28    

Je@nb a écrit a écrit :

Pour le topic v te chercher ça



je veux ca :D

Reply

Marsh Posté le 24-06-2002 à 14:44:23    


<?php
 
 
//déclaration d'un tableau vide
$smileys = array() ;
 
//chargement des smileys de la bd
$res= mysql_query( "SELECT code,image FROM smiley" )
while ( list($code, $img) = each(mysql_fetch_array($res)) )
{
$smileys[$code]= $img;
}


 
 
fn pour afficher les smiley :


function addSmileys($iString)
{
global $smileys
//remplacement des smileys dans un string
reset($smileys);
while ( list($code, $img)= each($smileys) )
{
$message=str_replace($code,'<img border="0" src="'.$img.'.gif">',$iString);
}
return $iString;
}

Reply

Marsh Posté le 24-06-2002 à 14:45:57    

ok
ca fait bientot 8 mois ke je fais comme ca :D

Reply

Marsh Posté le 24-06-2002 à 14:46:38    

sauf que ya un bug de sécu ... c pas limité a 10 smilies

Reply

Marsh Posté le 24-06-2002 à 14:47:27    

je fais ca moi :
 

Code :
  1. //
  2. // Interrogation de la base de données pour extraire les smileys a transformer
  3. //
  4. $query_smileys = mysql_query("SELECT code,html
  5.         FROM ".$config."_smileys;" )
  6.         or die("Erreur : ".__FILE__.":".__LINE__."<BR>".mysql_error());
  7. $i=0;
  8. while(list($code_s,$html_s)=mysql_fetch_row($query_smileys)) {
  9. $search66[$i]   = '/'  . $code_s . '/si';
  10. $search66[$i]   =  addcslashes($search66[$i],"?()[]" );
  11. $remplace66[$i] = '<IMG SRC="' . $html_s . '" ALT="">';
  12. $i++;
  13. }


 
et a chak post
 

Code :
  1. //
  2. //La case no smilies a été cochée ? si oui, on transforme les BBcodes smilies en images
  3. //
  4. if ( $nosmilie == 0 ) {
  5. // On remarquera le paramètres 10 en dernier argument, il permet de limiter le nombre d'occurences transformées
  6. $texte = preg_replace($search66,$remplace66,$texte,10);
  7. }

Reply

Marsh Posté le 24-06-2002 à 14:47:55    

arf, c pas le + important la limite de smiley non ?
 
sinon suffit d'utiliser un preg replace non ?

Reply

Marsh Posté le 24-06-2002 à 14:48:40    

Je@nb a écrit a écrit :

arf, c pas le + important la limite de smiley non ?
 
sinon suffit d'utiliser un preg replace non ?




tu rigoles là :D
 
met 10000 smilies ds un post tu va comprendre tout de suite :D

Reply

Marsh Posté le 24-06-2002 à 14:53:11    

Je testerai sur le forum de max  :D  :D

Reply

Marsh Posté le 24-06-2002 à 15:47:17    

Je@nb a écrit a écrit :

Je testerai sur le forum de max  :D  :D  




 
Non non, c bon, Sky l'a deja fait :D
L'a tout paitai le salo ! :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 24-06-2002 à 16:25:23    

Jte dirais un truc pour un new service (concurent d'un autre que tu connais bien) après que g fini Beaudelaire  :gun:  :gun:

Reply

Marsh Posté le 28-06-2002 à 17:32:17    

skylight a écrit a écrit :

je fais ca moi :
 

Code :
  1. //
  2. // Interrogation de la base de données pour extraire les smileys a transformer
  3. //
  4. $query_smileys = mysql_query("SELECT code,html
  5.         FROM ".$config."_smileys;" )
  6.         or die("Erreur : ".__FILE__.":".__LINE__."<BR>".mysql_error());
  7. $i=0;
  8. while(list($code_s,$html_s)=mysql_fetch_row($query_smileys)) {
  9. $search66[$i]   = '/'  . $code_s . '/si';
  10. $search66[$i]   =  addcslashes($search66[$i],"?()[]" );
  11. $remplace66[$i] = '<IMG SRC="' . $html_s . '" ALT="">';
  12. $i++;
  13. }
  14. //La case no smilies a été cochée ? si oui, on transforme les BBcodes smilies en images
  15. //
  16. if ( $nosmilie == 0 ) {
  17. // On remarquera le paramètres 10 en dernier argument, il permet de limiter le nombre d'occurences transformées
  18. $texte = preg_replace($search66,$remplace66,$texte,10);
  19. }






hops copié ;)
 
Je@nb> le code est de moi non ?


Message édité par ethernal le 28-06-2002 à 17:40:10

---------------
...oups kernel error...
Reply

Marsh Posté le 02-07-2002 à 18:30:55    

oui le code est de toi je crois

Reply

Marsh Posté le 02-07-2002 à 18:55:28    

déjà tu passes tous les ereg en preg.
 
sinon, ex. d'optimisation :

Code :
  1. $textepost = preg_replace(":((cry)|(hello)|(lol)|(love)):","<img src=\"images/smilies/$1.gif\">", $textepost);
  2. $textepost = preg_replace("[img](\w+)[/img]","<img src=$1>",$textepost);


(faut p'tet faire qques changements pour que ça marche mais c'est pour l'idée générale)
 
en gros faut parcourir le moins de fois possible le texte donc avoir moins de preg_replace mais plus compliqués


Message édité par siewn le 02-07-2002 à 18:55:47
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed