begin process at 2012 05 31 06:17:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

Hébergeurs

 > 

preg_replace_callback et temp d'execution


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

preg_replace_callback et temp d'execution

vendredi 21 mai 2004 à 14:33:33 | preg_replace_callback et temp d'execution

MisterV


Bonjour,

Il me semble avoir un assez bon niveau en php, et je me retrouve pourtant aujourd'hui confronté a un probleme que je ne sais pas resoudre.

J'ai fait un site web, en utilisant les fonctions ob_start('callback') et ob_end_flush().

Donc avant d'envoyer le resultat au client, la page HTML est traité par une fonction callback.

Dans cette fonction, j'utilise plusieurs fois la fonction preg_replace_callback

Ainsi, lorsque dans une page il y a une adresse mail, une URL, des caractères speciaux ou des mots qui doivent etre mis en gras, la fonction ajoute automatiquement les codes HTML necessaire.

Afin de ne pas toucher aux tags HTML, pour ne pas endommager le code, ma fonction callback est formée de la maniere suivante :

je repere les chaines de type "(balise HTML)(texte jusqu'a la prochaine balise)"

J'envois ces deux partie a une fonction qui traite le texte et renvois la balise + le texte traité.

apres avoir fait les remplacements necessaire la fonction callback retourne le buffer.

C'est donc un systeme peut etre un peu lourd, mais qui marche tres bien sur mon serveur local qu'est un vieux pc.
Par contre ca ne marche pas sur mon hebergeur, apparemment a cause d'un temps d'execution trop long. il n'affiche rien, aucun message d'erreur (a cause du ob_start je suppose), mais j'ai obtenu a un moment lors de tests un message, max execution time exceded(j'me souviens plus trop ce que j'avais fait pour l'obtenir)

voici un exemple de ma fonction callback :




function callback($buffer)
{
function emailCallback($tmp)
{
if(!ereg('(http://|@)', $tmp[1]))
{
$tmp[2] = eregi_replace('(http://[[:alnum:]\._-]+\.[[:alnum:]{2-3}/[[:alnum:]/._-]*)', '<a href="\\1">\\1</a>', $tmp[2]);
$tmp[2] = eregi_replace('([[:alnum:]]+[[:alnum:]\._-]*[[:alnum:]]+@[[:alnum:]]+[[:alnum:]\._-]*[[:alnum:]]+\.[[:alnum:]]{2,3})', '<a href="mailto:\\1">\\1</a>', $tmp[2]);
}
return $tmp[1].$tmp[2];
}

$buffer = preg_replace_callback("/(<[^<>]*>)([^<>]*)/", 'emailCallback', $buffer);

/* $GLOBALS['abbr'] est un tableau contenant les abbreviations a traiter et leurs signification */

/* c'est dans cette fonction que je transforme également les caractères speciaux en plus des abbreviations */
function abbrCallback($tmp)
{
$tmp[2] = html_entity_decode($tmp[2], ENT_QUOTES);
$tmp[2] = htmlentities($tmp[2], ENT_QUOTES);
if(ereg('[[:print:]]+', $tmp[2]) && !ereg('(http://|@)', $tmp[2]))
{
foreach($GLOBALS['abbr'] as $key=>$val)
{
$key = htmlentities($key, ENT_QUOTES);
$tmp[2] = ereg_replace('([[:space:][:punct:]]|^)('.$key.')([[:space:][:punct:]]|$)', '\\1<acronym title="'.$val.'">\\2</acronym>\\3', $tmp[2]);
}
}
return $tmp[1].$tmp[2];
}

$buffer = preg_replace_callback("/(<[^<>]*>)([^<>]*)/", 'abbrCallback', $buffer);

/* $GLOBALS['SpWords'] est un tableau contenant les mots a traiter et la class CSS a leur attribuer (differentes class pour mettre en gras ou en couleur etc... */

function SWordsCallback($tmp)
{
if(ereg('[[:print:]]+', $tmp[2]) && !ereg('(http://|@)', $tmp[2]))
{
foreach($GLOBALS['SpWords'] as $key=>$val)
{
$key = htmlentities($key, ENT_QUOTES);
$tmp[2] = eregi_replace('([[:space:][:punct:]]|^)('.$key.')([[:space:][:punct:]]|$)', '\\1<span class="'.$val.'">\\2</span>\\3', $tmp[2]);
}
}
return $tmp[1].$tmp[2];
}

$buffer = preg_replace_callback("/(<[^<>]*>)([^<>]*)/", 'SWordsCallback', $buffer);

return $buffer;
}


J'ai verifié que les fonction preg_replace_callback et ob_start('callback') marchent sur l'hebergeur

lorsque je supprime les preg_replace_callback de ma fonction, ou que j'en met un qui envois vers une fonction tres simple ca marche !!!

Si vous avez des idées sur la cause de mon probleme, toute suggestion sera la bienvenue.

Je pensais que le systeme etait trop lourd, mais ca marche en local sur un vieux pc donc je doute sur ce point.
Le site est hebergé chez Amen.fr, donc peut etre que cela vient de leurs serveurs qui sont trop lent, mais ca m'etonnerais.

peut etre que je pourrais obtenir le même resultat d'une autre maniere moin couteuse en ressource mais j'vois pas comment, j'chui ouvert a toutes propositions.

Merci d'avance
lundi 24 mai 2004 à 11:12:10 | Re : preg_replace_callback et temp d'execution

MisterV


Finalement j'ai réussit a solutionner mon probleme en reformulant ma fonction.
Je ne sais toujours pas d'ou venait mon probleme, mais bon c'est pas grave c'est oublié c'est fini.

bye


Cette discussion est classée dans : fonction, replace, callback, tmp, alnum


Répondre à ce message

Sujets en rapport avec ce message

utiliser une fonction dans preg_replace() [ par Rabba ] Hello! J'aimerais utiliser une fonction dans preg_replace comme suit:     preg_replace('/\[html\](.*)\[\/html\]/Us',strtoupper('$1'),$Data); le pro fonction str_replace [ par aureludo ] Bonsoir,voilà je suis en train de créer un moteur de recherche pour mon site ce dernier fonctionne très bien. Pour l'affichage des résultats je met en "&" dans une expression régulière [ par Nitruk ] Bonjour, il semblerait que je rencontre un problème en essayant de trouver des url, ou plus précisment des balises "url" de BBcode.Pour adapter celles Utiliser une fonction membre de la classe comme callback [ par Evangun ] Bonjour,je n'arrive pas à spécifier une méthode de la classe courante comme fonction de callback.J'ai tenté plusieurs déclarations sans succès (je sui Problème avec la fonction: Preg_Replace [ par masterofquebec ] Bonjour,Je cherche a convertir le texte:"yk-15" => "Beaver Creek",enarray("yk-15", "Beaver Creek"),à l'aide de Preg_Replace mais je ne suis pas très h Fonction contraire de str_replace [ par redpooka ] Existe-t-il une fonction qui fasse le contraire de str_replace ?Qui au lieu de remplacer les caractèrs définit, remplace les caractères non définit ?P probleme avec la fonction str_replace [ par hajeur_abd ] bonjourj'ai récuperé le chemin d'acces d'un fichier dans une variable et je veu remplacer les anti-slash par des des slash.voila le code que j'ai tapé Supprimer en fonction d'une class [ par 64nemesis ] Bonjour,Voilà je cherche à supprimer tous les appels xxxxxxxxxxxxxxxxxxxxxx dans $var Peut importe ce qu'il y a  en xxxxxxxxxxxxxxxxxxxxxxxx, cela pe Faire une 2e requête sql en fonction de la 1ere [ par kevin54000 ]


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales