Optimisation de script

Signaler
Messages postés
4
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
7 juin 2004
-
Messages postés
728
Date d'inscription
jeudi 20 juin 2002
Statut
Membre
Dernière intervention
7 novembre 2007
-
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

Messages postés
4
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
7 juin 2004

voici un lien vers le code un peu mieux presenter, pour simplifier la lecture :

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

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