witam!
mam taki problem. skrypt odczytuje z bazy jakis tam tekst i chce aby wyswietlił ten tekst, a w miejsce wszystkich łańcuchów znaków: {links} w tym tekście włożył includa.
proszę o pomoc
witam!
mam taki problem. skrypt odczytuje z bazy jakis tam tekst i chce aby wyswietlił ten tekst, a w miejsce wszystkich łańcuchów znaków: {links} w tym tekście włożył includa.
proszę o pomoc
Najpierw funkcjami obróbki stringów podmień {links}'y na funkcje include, a potem użyć eval, by ten kod wykonać. Pamiętaj jednak, że oznaczać to może, iż nieupoważniony kod (stworzony przez twórcę skryptu z bazy - pewnie to jakieś skórki czy coś takiego), wykona się na takich samych prawach dostępu do systemu co skrypt PHP! Musisz się przed tym zabezpieczyć.
jak się przed tym zabezpieczyć?
jeśli w tym includowanym pliku nie zmieniasz danych ale są zawsze takie same to po prostu raz je sobie wykonaj a potem podmień {links} z wynikiem, np:
$tekst = str_replace('{links}',
eval('?' . '>' . file_get_contents('plik_includowany') . '<?php '),
$tekst);
ob_start();
include('plik_includowany');
$zamien = ob_get_clean();
$tekst = str_replace('{links}', $zamien, $tekst);
jeśli się dane aktualizują to za każdym razem wykonujesz znowu kod, pozwoli ci na to np preg_replace
Może chodzi Ci o to, żeby dane były w pliku txt i łatwe do zmiany (np jak chcesz często uaktualniać dane a masz niezbyt szybkie łącze z ftp)?
function zwrocplik($plik){
$linijki=file($plik);
$zmienna='';
foreach($linijki as $linijka){
$zmienna.=$linijka."\n";
};
return $zmienna;
};
bardzo prosty skrypt w działaniu (specjalnie nie utrudniałem zbytnio tego :P)
do zamiany tekstu z tym jest prosty str_replace -
$tekst str_replace('{links}',zwrocplik('localhost/odczyty_z_bazy.php?user=ja&pass=haselko',$tekst);
zaletą tego jest to, że CAŁA zawartość pliku odczyty_z_bazy.php ze zmiennymi $_GET user=ja i pass=haselko jest przekazywana do strony.
PS. napisanie dokładnie o co ci chodzi przydało by się, ponieważ niezbyt mam pojęcie o co ci właściwie chodzi.
hmm... czy w tych postach zawiera się odpowiedź na moje pytanie?
voldenet napisał(a)
foreach($linijki as $linijka){
$zmienna.=$linijka."\n";
};
Od czego jest implode()? I po co stawiasz średnik po zamykającej klamrze?
@ciapek888: nie, to są inne rozwiązania problemu postawionego w pierwszym poście :P
można zamienić wszystkie „<?” na „<?php echo '<?'; ?>” (i „<%” na „<?php echo '<%'; ?>”, jeśli jest włączone asp_tags), a następnie „{links}” na include'a. Następnie dopisać na początku „?>”, na końcu „<?php ” (koniecznie ze spacją!) i eval()-nąć.
skrypt został na siłę uproszczony (chociaż... może by było prościej)
a średnik po zamykającej klamrze to taki nawyk :D
udało mi się to zrobić tylko wykorzystując ten kod:
ob_start();
include('plik_includowany');
$zamien = ob_get_clean();
$tekst = str_replace('{links}', $zamien, $tekst);
Ale gdy próbowałem zrobić to dla kilku róznych {xxx} to nie działo. Jak powinien wygladac kod dla kilku róznych {xxx}?
Z góry dzięki
str_replace(Array('{links}', '{xxx}', '{jakiestam}'), Array($zamienlinks, $zamienxxx, $zamienjakiestam), $tekst);
Mógłbyś napisać jak to w całości ma wyglądac? Niepotrafię tego zrobić...
Jeszcze raz bardzo proszę o pomoc
a na ten przykład
$tags = $replacements = Array();
$tablica = Array(
'{xxx}' => 'plikxxx.php',
'{yyy}' => 'plikyyy.php',
'{zzz}' => 'plikzzz.php'
);
foreach($tablica as $k => $v){
ob_start();
include($v);
list($tags[], $replacements[]) = Array($k, ob_get_clean());
}
$tekst = str_replace($tags, $replacements, $tekst);
ps ŁATATA = ciapek ?
// a tak jakoś mi się pomyślało, bo na zmianę pytania w jednym wątku piszecie
yyy chyba nie.... ;p
;] na pewno nie,
a co? :>