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

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°164507
Max Evans
Posté le 24-06-2002 à 12:55:16  profilanswer
 

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
mood
Publicité
Posté le 24-06-2002 à 12:55:16  profilanswer
 

n°164516
format_c
Plouf plouf ...
Posté le 24-06-2002 à 13:08:07  profilanswer
 

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

n°164525
Max Evans
Posté le 24-06-2002 à 13:13:25  profilanswer
 

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
n°164530
format_c
Plouf plouf ...
Posté le 24-06-2002 à 13:16:00  profilanswer
 

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

n°164531
Max Evans
Posté le 24-06-2002 à 13:16:44  profilanswer
 

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
n°164536
format_c
Plouf plouf ...
Posté le 24-06-2002 à 13:23:41  profilanswer
 
n°164537
Max Evans
Posté le 24-06-2002 à 13:24:54  profilanswer
 

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


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°164546
Max Evans
Posté le 24-06-2002 à 13:34:58  profilanswer
 

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
n°164554
format_c
Plouf plouf ...
Posté le 24-06-2002 à 13:45:54  profilanswer
 

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

n°164564
Max Evans
Posté le 24-06-2002 à 13:53:53  profilanswer
 

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
mood
Publicité
Posté le 24-06-2002 à 13:53:53  profilanswer
 

n°164578
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:06:10  profilanswer
 

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

n°164579
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:06:49  profilanswer
 

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

n°164581
Max Evans
Posté le 24-06-2002 à 14:09:59  profilanswer
 

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
n°164588
Max Evans
Posté le 24-06-2002 à 14:15:02  profilanswer
 

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


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°164591
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:19:41  profilanswer
 

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']);

n°164592
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:19:53  profilanswer
 

Pour le topic v te chercher ça

n°164614
skylight
Made in France.
Posté le 24-06-2002 à 14:42:15  profilanswer
 

up

n°164615
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:42:58  profilanswer
 

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

n°164618
skylight
Made in France.
Posté le 24-06-2002 à 14:43:28  profilanswer
 

Je@nb a écrit a écrit :

Pour le topic v te chercher ça



je veux ca :D

n°164619
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:44:23  profilanswer
 


<?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;
}

n°164622
skylight
Made in France.
Posté le 24-06-2002 à 14:45:57  profilanswer
 

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

n°164624
skylight
Made in France.
Posté le 24-06-2002 à 14:46:38  profilanswer
 

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

n°164625
skylight
Made in France.
Posté le 24-06-2002 à 14:47:27  profilanswer
 

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. }

n°164627
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:47:55  profilanswer
 

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

n°164628
skylight
Made in France.
Posté le 24-06-2002 à 14:48:40  profilanswer
 

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

n°164636
Je@nb
Kindly give dime
Posté le 24-06-2002 à 14:53:11  profilanswer
 

Je testerai sur le forum de max  :D  :D

n°164717
Max Evans
Posté le 24-06-2002 à 15:47:17  profilanswer
 

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
n°164780
Je@nb
Kindly give dime
Posté le 24-06-2002 à 16:25:23  profilanswer
 

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

n°168164
ethernal
Chercheur de vérité...
Posté le 28-06-2002 à 17:32:17  profilanswer
 

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...
n°170072
Je@nb
Kindly give dime
Posté le 02-07-2002 à 18:30:55  profilanswer
 

oui le code est de toi je crois

n°170081
siewn
Posté le 02-07-2002 à 18:55:28  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
[JAVA/RESEAUX] pinger / Problème avec les fluxProbleme avec GDK
problème de comboboxPHP MSSQL charset
[C] Probleme avec un free ....Probleme de code !
[PHP/MYSQL][PHP][NB] différence entre print et echo et entre des " et '
Probleme de comparaison .....[PHP] upload de fichier qd on est un newbie ...[ca devient urgent]
Plus de sujets relatifs à : [PHP] Problème de Parsing :(((


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