Jak wykonać kod PHP z bazy danych

04 mar
{lang: 'pl'}

Przykładowy problem. Tworzymy moduł do wysyłania maili. Z backendem i możliwością edytowania szablonów email z poziomu panelu administracyjnego. Szablony składać się będą z kodu HTML przemieszanego z kodem PHP. Nasuwa się tylko jedno zasadnicze pytanie. Jak parsować kod PHP wyciągnięty z bazy danych?

O ile z samym kodem PHP nie ma żadnego problemu, gdyż wystarczy wrzucić wartość z komórki bezpośrednio do funkcji eval np.:

$col = 'echo time();';
echo $col; //wynik echo time();
eval( $col ); //wynik 1267734526

To w momencie kiedy w kodzie znajduje się także kod HTML, zaczynają się schody. Zobaczmy.

<h1>Od 01.01.1970 upłynęło <?php echo time(); ?> sekund</h1>

Wrzucenie tego w funkcję eval będzie grzechem śmiertelnym i zaskutkuje błędem typu Fatal Error, ponieważ nie jest to poprawny kod PHP. Zastosujmy małą i niezwykle prostą sztuczkę.

eval( "?><h1>Od 01.01.1970 upłynęło <?php echo time(); ?> sekund</h1><?php" );
//wynik Od 01.01.1970 upłynęło 1267734526 sekund

Teraz jest proprawnie. Zastosowaliśmy zwykły trick polegający na zamknięciu bloku PHP wykonaniu kodu HTML, ponownym wykonaniu PHP itd.

Istnieje jeszcze jedna metoda dająca nieco większe możliwości i kontrolę nad tym co będzie parsowane. Metoda ta polega na wykorzystaniu buforowania.

function parseEmailBody( $__sString__ , $__aVariables__ = array() ) {
      ob_start();
      extract( $__aVariables__ );
      while(substr_count($__sString__, '[?php') > 0) {
        list($__html__, $__sString__) = explode('[?php', $__sString__, 2);
        echo $__html__;
        list($__code__, $__sString__) = explode('?]', $__sString__, 2);
        if(  eval($__code__) === false ) {
          /* obsluga bledow parsowania */
        }
      }
      $__parsed__ = ob_get_contents();
      @ob_end_clean();
      return $__parsed__;
  }

Jak widać przykład ten daje nieco większe możliwości. Przykładowo powyżej posłużyłem się pseudo kodem używając znaczników

[?php

i

?]

odpowiednio do otwierania i zamykania bloków kodu php.

Wybór odpowiedniej metody należy do Was.

Print Friendly

Wyszukiwane frazy:

  • kod php w bazie danych (17)
  • kod html w bazie danych (3)
  • php eval (3)
  • kod baza danych (2)
  • kod php przemieszany z html (2)
  • php w bazie (2)
  • kod php w php (1)
  • kod php z bazy danych (1)
  • kody html baza (1)
  • baza danych kod php (1)

Inne posty:

  1. Przydatne wyrażenia regularne
  2. Jak przechowywać pliki na serwerze

Tagi: , , ,

« »

[B]log programistyczny

IP 38.107.179.242 (38.107.179.242)