[php]printf z analizą kodu

0

Witam,
chciałem napisać stronę, która w 99% byłaby przechowywana w bazie danych mysql. Rozwiązanie to polega na tym, że to co normalnie umieszcza się w plikach .php u mnie jest kolejnymi rekordami bazy danych. Dzięki temu strona będzie bardzo elastyczna - poprzez http będzie można zmienić praktycznie całą jej zawartość.

Napisałem już skrypt index.php oraz install.php, to pierwsze stanowi całą dyskową zawartość strony; natomiast to drugie powoduje utworzenie tabel oraz dadanie najbardziej niezbędnych rekordów do tych tabel.

Wszystkie skrypty już przetestowałem - działają miodzio, niestety pojawił się pewien problem. Nie wiem jak dane pobrane z mysql poddać analizie kodu, np.

$tekst = "<h1>zawartosc strony</h1> <? printf(\"Ahoj! przygodo!\");?>";
printf($tekst);

Wyświetla mi:
<h1>zawartosc strony</h1> <? printf("Ahoj! przygodo!");?>
A nie zamierzone:
<h1>zawartosc strony</h1> Ahoj! przygodo!

Zastanawiam się, czy istnieje komenda, która pomimo wyświetlania tekstu podaje go translatorowi skryptu? Na upartego mógłbym zrzucać zawartość zmiennej do pliku, a potem to includować... ale to jest najgorsze z najgorszych rozwiązań?

Najwyżej zrezygnuję z 99% mysql i zrobię tą witrynę w bardziej konwencjonalny sposób.

0

w komentarzach do eval na stronach php mozna znalezc

function eval_buffer($string) { 
    ob_start(); 
    eval("$string[2];"); 
    $ret = ob_get_contents(); 
    ob_end_clean(); 
    return $ret; 
} 

function eval_html($string) { 
    return preg_replace_callback("/(<\?php|<\?)(.*?)\?>/si", 
"eval_buffer",$string); 
}

i to jet chyba to co chcesz.

0

dzięki za nakierowanie, teraz wiem jak sprawa wygląda.
Jest sobie komenda eval($string), której podaje się jako argument kod php, a ona symuluje jego wykonanie. Problem polega na tym, że kod strony to mieszanka php i html, a rozdzielenie ich tak by wszystko było poprawnie interpretowane jest bardzo trudne.

W szczególności denerwują mnie błędnie interpretowane instrukcje ze znakiem ':'.

Np.

<? if ($zwierzak = 'pies'): ?>
<img src="piesek.jpg"> Hau! Hau!
<? else: ?>
<img src="kotek.jpg"> Miau! Miau!
<? endif; ?>

Jedna instrukcja if'a jest porozbijana w kilka znaczników <?, ?> - jest to przeszkoda nie do pokonania...
chyba, żeby zamienić całego stringa na kod php poprzez zamieszczenie kodu html w printf'ie, a dopiero potem użycie eval'a.

if ($zwierzak = 'pies'):
printf ("<img src=\"piesek.jpg\"> Hau! Hau!");
else:
printf ("<img src=\"kotek.jpg\"> Miau! Miau!");
endif;

Jeszcze trochę pokombinuję, ale chyba bardziej opłaci mi się przebudować to co już mam zamiast się z tym użerać.

0

[glowa]

podalem gotowy kod dla php+html!

<?php
function eval_buffer($string) { 
    ob_start(); 
    eval("$string[2];"); 
    $ret = ob_get_contents(); 
    ob_end_clean(); 
    return $ret; 
} 

function eval_html($string) { 
    return preg_replace_callback("/(<\?php|<\?)(.*?)\?>/si", 
"eval_buffer",$string); 
}



$tekst = "<h1>zawartosc strony</h1> <? printf(\"Ahoj! przygodo!\");?>";
echo eval_html2($tekst);
?>

mozesz przerobic troche wyrazenie regularne. Niestety skladnia z : nie bedzie pewnie najlepiej dzialac. Generalnie nie jest to najlepsza metoda programowania.

BTW
$zwierzak = 'pies' zawsze bedzie prawda ...

0

ale nie rozumiem po co tak ? :| przecież wystarczy:

eval('?>' . $kod_strony . '<?php');

i wszystko - zobacz

natomiast przechowywanie stron w bazie chociaż często praktykowane to uważam jednak za głupi pomysł (co innego jeśli strona jest często modyfikowana i przez wszystkich - np wiki)

0

w tej dyskusji (ponizej definicji eval) tez byla taka porada ale co ciekawe u mnie nie dziala ?!
Dziala natomiast

<?php
$tekst = "HTML<?php printf(\"Ahoj! przygodo!\");?>HTML<?php echo \"ddd\";?>";
eval('?>'.$tekst);
?>
0

nie rozumiem jak to może gdzieś nie działać jak gdzie indziej działa chociaż w sumie te <?php na końcu to też takie naciągane, przecież dziwne żeby nie wróciło do trybu php i pisało reszte kodu jako text
może nie działa przez to że nie ma spacji tam ("<?php" zamiast "<?php ") ale u mnie to działa i taki fragment kodu jest np w smarty ...

0

che che a u mnie w smarty jest

$smarty->_eval('?>' . $_var_compiled);

a defincija _eval jest rownoznaczna z eval.
Aczkolwiek ze spacja dziala, co ma odrobine sensu, ale dziwnie wyglada (i jest naciagane ...).

*dziwnie wyglada

wyglada logicznie ale jak bierze sie pod uwage, ze eval dziala w php, to jednak dziwnie ...

0
hjghjghj napisał(a)

co innego jeśli strona jest często modyfikowana i przez wszystkich - np wiki

mechanizmy (php) wiki nie są często i przez wszystkich modyfikowane ;)

taka strona 99% w mysql jest dobra wtedy i tylko wtedy gdy służy tylko i wyłącznie celom edukacyjnym :P. Ani to bezpieczne, ani wygodne, ani wydajne...

1 użytkowników online, w tym zalogowanych: 0, gości: 1