Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [php] eval e include

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    [php] eval e include

    Ciao a tutti,
    vorrei capire come poter processare include all'interno di un testo.

    Vi faccio un esempio....

    ho questa variabile:

    Codice PHP:
    $sText "ciao a tutti mi trovo [#include-pagina-include#] ciao ciao ciao ciao bla bla bla"
    su questa stringa faccio un replace su [#include-pagina-include#] in modo da venire:

    Codice PHP:
    $sText "ciao a tutti mi trovo require_once(pagina.php) ciao ciao ciao ciao bla bla bla"
    Dopo ho fatto:

    Codice PHP:
    eval("\$sText = \"$sText \";");
    print(
    $sText); 
    ma non vā...

    Come mai?

    Ciao e grazie Max
    http://www.mdlwork.com

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    Risolto!

    Pensavo di avere pių risposte

    Ovviamente scherzo, nel frattempo, come al solito, ciō sbattuto la testa fino a farmi male, arrivando alla conclusione...

    Posto il codice, perchč magari a qualcuno potrebbe servire...

    Ho risolto "fabricando" questo script:

    Codice PHP:
    <?php
    function get_include_contents($filename) {
        if (
    is_file($filename)) {
            
    ob_start();
            include 
    $filename;
            
    $contents ob_get_contents();
            
    ob_end_clean();
            return 
    $contents;
        }
        return 
    false;
    }

    function 
    getTextProcess($sText){
      
    $sPattern '/\<!--inc\[(.*?)\]-(.*?)-inc\[(.*?)\]--!\>/si';
      
    preg_match_all($sPattern,$sText,$aCont);
      for(
    $x=0;$x<count($aCont[2]);$x++){
        
    $sTemp get_include_contents($aCont[2][$x]);
        
    $sText str_replace($aCont[0][$x],$sTemp,$sText);
      }
      unset(
    $sTemp);
      return 
    $sText;
    }

    print(
    getTextProcess("Oggi tutto ok <!--inc[0]-test.inc.php-inc[0]--!> forse si <!--inc[1]-test2.inc.php-inc[1]--!> yessssssss"));
     
    ?>
    La funzione "get_include_contents" l'ho presa da php.net mentre il resto l'ho fatto io.

    Semplicemente passando una stringa del tipo "<!--inc[0]-test.inc.php-inc[0]--!>" all'interno di un testo (quindi proveniente anche da un CMS), la stringa viene ripassata dalla funzione getTextProcess (l'ho chiamata cosė perchč in realtā restituisce il testo processato), che restituisce gli include giā processati (quindi senza bisogno di ricorrere a eval).

    Con un'espressione regolare conto quanti sono gli include (che devono essere numerati 0,1..n) e sostituisco l'include stesso, processato da "get_include_contents".

    se per esempio il mio include si chiama "ciccio.inc.php", all'interno del testo metterō:

    <!--inc[0]-ciccio.inc.php-inc[0]--!>

    se ho due include "ciccio.inc.php" e "pincopallo.inc.php" metterō:

    <!--inc[0]-test.inc.php-inc[0]--!>
    <!--inc[1]-pincopallo.inc.php-inc[1]--!>

    e cosė via...

    Se volete cambiare la forma per specificare un include, dovete cambiare anche l'espressione regolare...

    E' tutto, ciao ciao a tutti, MAX
    http://www.mdlwork.com

  3. #3
    Ciao,
    per semplificare il tuo codice potresti usare preg_replace_callback al posto di preg_match_all. Se vuoi in caso ti faccio un esempio
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    ...

    ciao AnĒkin,
    fammi pure un esempio magari č meglio come dici tu

    Grazie pr la risposta, ciao Max
    http://www.mdlwork.com

  5. #5
    La tua funzione get_include_contents la passi come funzione di callback al replace, cosė puoi semplificare la regex dato che nn occorre il contatore:

    Codice PHP:
    function get_include_contents($filename) { //print_r($filename);
        
    if (is_file($filename[1])) {
            
    ob_start();
            include 
    $filename[1];
            
    $contents ob_get_contents();
            
    ob_end_clean();
            return 
    $contents;
        }
        return 
    "";



    $sText "ciao a tutti mi trovo [#inc-pippo.inc.php-inc#] ciao ciao ciao
              ciao[#inc-pluto.inc.php-inc#]  bla bla bla"
    ;
    echo 
    $sText=preg_replace_callback('/\\[#inc-(.+?)-inc#\\]/','get_include_contents',$sText); 
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    ...

    Ciao AnĒkin,
    grazie per l'esempio appena posso lo provo
    http://www.mdlwork.com

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 © 2025 vBulletin Solutions, Inc. All rights reserved.