Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1

    [PILLOLA]Template Alternativi;

    by Carlesso Cristian
    INTRO:
    la mia prima pillola in php.
    Studio questo linguaggio da meno di un mese e
    dopo aver letto l' articolo sui template e i vari 3d sono rimasto
    affascinato da come utilizzando una soluzione relativamente semplice
    sia possibile estrarre il codice php da una pagina html.
    l' articolo e' il seguente:
    Utilizziamo i template integrati con Php
    con relativo 3d:http://forum.html.it/forum/showthrea...hreadid=333902
    inoltre interessante anche il 3d template dinamici(?)

    I 2 metodi proposti erano quelli del metodo eval();
    e del metodo eregi_replace();
    ma mentre il primo e' troppo lento il secondo richiede che per ogni
    variabile introdotta nell html deve esserci un eregi_Replace.
    ho allora cominciato a pensare ad un metodo unico
    per poter con una sola istruzione cambiare tutte le
    variabili contenute nel Template.

    il metodo che ho studiato fonde i due metodi proposti
    nel senso che ho automatizzato la funzione in modo che
    non occorra eseguire un istruzione per ogni variabile,
    usando un eval particolare, quello delle espressioni
    regolari in stile perl, in particolare ho usato la funzione
    preg_replace(); ottenendo cosi' i risultati voluti..
    inoltre ho scoperto che e' addirittura piu' veloce della eregi_replace
    poiche' lo stile POSIX e' piu' lento dello stile PERL.


    cominciamo con analizzare un template che chiamero a.html
    codice:
    <html><head><title>template</title>
    </head>
    <body>
    Sicuramente i  
    
    ameranno la  
    </body>
    </html>
    ed ora vediamo come ho proceduto per effettuare la magia:
    Codice PHP:
    <?php 
    $name
    ="fagiani";
    $pippo="pillola";
    $pluto=implode("",file("a.html"));
    $ho=preg_replace('/()/e','$$2',$pluto);
    echo 
    $ho;
    ?>
    ora, indipendentemente dal codice scritto male (programmo in
    php da pochissimo) si puo' vedere che soltanto cambiando il pattern
    si puo' fare un po' di tutto ..
    da cambiare il simbolo di $ con un qualsiasi altro simbolo
    se poi i template vengono creati dinamicamente si possono creare
    pagine html diverse in base alle preferenze dell' utente
    complicando un po la sostituzione si puo arrivare fino
    alla creazione di custom tag(ci sto lavorando) e altro ancora..

    analizziamo un attimo il codice:

    tutto e' svolto dall' istruzione preg_replace();
    ma andiamo per ordine:
    codice:
    $ho=		la stringa finale verra messa in $ho
    preg_replace('/	qui inizia L espressione da trovare 
    (<!--) 		cerca un tag di inizio commento
    /$		cerca il segno del $
    (\w+)		cerca o un _(underscore) o un carattere alfanumerico
     		praticamente un carattere con cui puo essere scritto
    		una variabile
    (-->)		cerca il tag di chiusura commento
    /e'		usa eval se esiste codice php.
    ,'$$2'		sostituisce (\w+) con $(\w+) ovvero con il valore.
    ,$pluto);	il file di template.

    ora creiamo una funzione che passato solo il filename del template faccia tutto
    Codice PHP:
    function Carlesso_Replace($filename){
    return 
    preg_replace('/()/e','$GLOBALS[$2]',implode("",file($filename)));

    naturalmente si possono aggiungere tutti i controlli del caso.

    Ps. passo anche la pagina che calcola il tempo d'esecuzione.
    io su un 486 sx 12 Mb di ram 33mhz ho avuto i seguenti tempi medi:

    mio algoritmo:
    0.96687343478203
    eregi_replace:
    1.3514632582664
    Codice PHP:
    <?php
    function getMicroTime(){
        list(
    $usec,$sec)=explode(' ',microTime());
        return ((float)
    $usec + (float)$sec);
    }
    /* Numero ripetizioni peruna media "probabile" +1 */
    $iter=101;

    /* Numero di esecuzione del codice per ogni ripetizione */
    $max100;
    set_time_limit(0);

    for(
    $i=0;$i<$iter;$i++){
        
    ob_start();
        
    $time_start=getMicroTime();
        for(
    $a=0;$a<$max;$a++){
            
    /* Codice da eseguire*/
    }

        
    $totalgetmicrotime() - $time_start ;
        
    ob_end_clean;

        print(
    $i."\n\t --Total Time :\n".$total." seconds \n");
        
    /*Scartiamo la prima ripetizione poiche' fuorviante*/
        
    if($i>0)
            
    $glob +=$total;
        }
    print(
    "\nMedia: \n\t"$glob/($iter-1) ." --per \n ".$max." iterazioni\n\n");
    ?>
    ho trovato quest' ultima funzione su linux e c numero 31.
    ...
    la suppostina e' finita, andate in pace, naturalmente
    per eventuali correzioni chiarimenti, eccetera postate pure..
    se migliorate l' algoritmo sono il primo ad esservene riconoscente.

  2. #2
    Non sono così convinto che questo metodo sia più veloce di eval() (sicuramente lo è di ereg)
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  3. #3
    non ho provato, ma stando a quel che si dice qui
    eregi_replace() e' piu' veloce di eval();

    (devo ancora controllare effettivamente..)
    comunque sul mio libro dicono che eval e' lentissima..

  4. #4
    In ogni caso l'ho aggiunta al thread in rilievo :metallica
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  5. #5
    Originariamente inviato da gm
    In ogni caso l'ho aggiunta al thread in rilievo :metallica
    :adhone:
    thanks!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    355
    Originariamente inviato da kentaromiura
    non ho provato, ma stando a quel che si dice qui
    eregi_replace() e' piu' veloce di eval();

    (devo ancora controllare effettivamente..)
    comunque sul mio libro dicono che eval e' lentissima..
    il vincitore del confronto tra eregi_replace() e eval() varia di caso in caso ... dipende dal template che devi trattare.

  7. #7

    ^_^

    non la famo anda giù! almeno finchè non la vede il mod ^_^
    se no è lavoro sprecato ^_^

    :quote:

  8. #8

    Re: ^_^

    Originariamente inviato da moonx2004
    non la famo anda giù! almeno finchè non la vede il mod ^_^
    se no è lavoro sprecato ^_^

    :quote:
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  9. #9

    ^_^

    azz è già aggiunta alle pillole :quipy:

    hihi

  10. #10

    puntualizzo alcuni punti..

    ieri ho provato, con l algoritmo pubblicato i vari
    metodi, ed ho scoperto che:

    mentre il tempo del mio algoritmo era
    0.96687343478203
    e quello della eregi_replace era
    1.3514632582664

    usando come codice il seguente:
    Codice PHP:

    $name
    =fagiani;$pippo=pillola;
    eval(
    "echo(\"".str_replace("\"","\\\"",implode("",file("a.html")))."\");"); 
    si ottiene un tempo di:
    1.2586433792114

    mentre ho scoperto che accedere a $GLOBLALS rilenta di poco il mio algoritmo
    infatti il tempo medio registrato e' di:
    1.084536741972

    anche ottimizzata la eregi_replace() resta molto lenta:
    Codice PHP:
    $name="fagiani";
    $pippo="pillola";
    echo 
    eregi_replace("",$name,eregi_replace("",$pippo,implode("",file("a.html")))); 
    risulta un tempo di:
    1.3216420006752

    infine il mio ottimizzato tutto su una riga

    Codice PHP:
    $name="fagiani";
    $pippo="pillola";
    echo 
    preg_replace('/()/e','$$2',implode("",file("a.html"))); 
    da' come risultato:
    0.92531366825104
    il mio algoritmo rimane il piu' rapido e' devo correggermi dicendo
    che il metodo eval non e' il piu' lento come sostenuto nei vari 3d,
    ma bensi' il piu' veloce dei 2...
    naturalmente tutto e' aleatorio..
    e dipende da caso a caso..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.