Optimisation de script

cs_MisterV Messages postés 4 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 7 juin 2004 - 7 juin 2004 à 13:15
eax Messages postés 728 Date d'inscription jeudi 20 juin 2002 Statut Membre Dernière intervention 7 novembre 2007 - 7 juin 2004 à 13:34
Bonjour,

j'ai fait un script permettant de traiter le code HTML d'une page avant son envois a l'utilisateur.

ainsi je peux automatiquement ajouter a mes pages des tags pour les liens type email ou URL, ou alors mettre des mots en gras ou autre.

malheureusement mon script ne doit pas etre bien optimiser car il est plutot long a executer, et cela se ressent surtout lorsque le serveur qui l'execute est lent.

Si quelqu'un pouvait donc me conseiller pour optimiser ce code je lui en serais eternellement reconnaissant :p

voici le script :

function callback($buffer)
    {
    function parser($chaine, $fonction = 'sous_callback')
        {
        return preg_replace_callback("/(<[^<>]*>)([^<>]+)/", $fonction, $chaine);
        }
    function address_tags($chaine)
        {
        $tmp = eregi_replace('(http://[[:alnum:]\._-]+\.[[:alnum:]{2-3}/[[:alnum:]/._-]*)', '[\\1 \\1]', $chaine);
        $tmp = eregi_replace('([[:alnum:]]+[[:alnum:]\._-]*[[:alnum:]]+@[[:alnum:]]+[[:alnum:]\._-]*[[:alnum:]]+\.[[:alnum:]]{2,3})', '[mailto:\\1 \\1]', $tmp);
        return ($tmp != $chaine)?$tmp:false;
        }
    function sous_callback($arg)
        {
        $arg[2] = html_entity_decode($arg[2], ENT_QUOTES);
        $arg[2] = htmlentities($arg[2], ENT_QUOTES);
        if(!ereg('title', $arg[1]))
            {
            $arg2 = false;
            if(ereg('(http://|@)', $arg[2]) && !ereg('(http://|@)', $arg[1]))
                {
                $arg2 = address_tags($arg[2]);
                }
            if($arg2)
                $arg[2] = parser($arg2, 'sous_callback2');
            else
                $arg[2] = sous_callback2($arg[2]);
            }
        return $arg[1].$arg[2];
        }
    function sous_callback2($arg)
        {
        if(is_array($arg))
            {
            $tocheck = $arg[2];
            $tag = $arg[1];
            }
        else
            {
            $tocheck = $arg;
            $tag = '';
            }
        if(!ereg('(http://|@)', $tocheck))
            {
            foreach($GLOBALS['abbr'] as $key=>$val)
                {
                $key = html_entity_decode($key, ENT_QUOTES);
                $val = html_entity_decode($val, ENT_QUOTES);
                $key = htmlentities($key, ENT_QUOTES);
                $val = htmlentities($val, ENT_QUOTES);
                $tocheck = ereg_replace('([[:space:][:punct:]]|^)('.$key.')([[:space:][:punct:]]|$)', '\\1\\2\\3', $tocheck);
                }
            foreach($GLOBALS['SpWords'] as $key=>$val)
                {
                $key = html_entity_decode($key, ENT_QUOTES);
                $key = htmlentities($key, ENT_QUOTES);
                $tocheck = eregi_replace('([[:space:][:punct:]]|^)('.$key.')([[:space:][:punct:]]|$)', '\\1\\2\\3', $tocheck);
                }
            }
        return $tag.$tocheck;
        }
    $top ($GLOBALS['HTML_Structure'] 'normal')?setUsualHTMLPage():setSpecialHTMLPage();    $bot ($GLOBALS['HTML_Structure'] 'normal')?showUsualEnd():showSpecialEnd();
    $buffer = $top.$buffer.$bot;

    $titre = showTitre();
    $buffer = str_replace('<%-----TITRE-----%>', $titre, $buffer);

    return parser($buffer);
    }


les effets de cette fonction :

- ajoute le debut de la page HTML en fonction de la structure choisie
- ajoute la fin de la page HTML en fonction de la structure choisie
- remplace le tag <%-----TITRE-----%> par la valeur que doit avoir le titre

- recherche dans les textes hors tags differentes choses :
- les URL et les emails (ajoutes les tags pour les liens)
- les caracteres speciaux (les traduit en entités HTML)
- des abbreviations (definies dans un tableau $GLOBALS['abbr'])
- des mots pour les mettre en gras par exemple (definis dans un tableau $GLOBALS['SpWords'])

Merci d'avance.

2 réponses

cs_MisterV Messages postés 4 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 7 juin 2004
7 juin 2004 à 13:28
voici un lien vers le code un peu mieux presenter, pour simplifier la lecture :

http://www.phpcs.com/code.aspx?ID=23475
0
eax Messages postés 728 Date d'inscription jeudi 20 juin 2002 Statut Membre Dernière intervention 7 novembre 2007 2
7 juin 2004 à 13:34
si ton server rame, change le va sur n-serv.com

:big) Sylvain [[mailto:eax@eax-online.com email]] [homepage] [myCV]
0
Rejoignez-nous