[php] problem z include

0

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

0

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ć.

0

jak się przed tym zabezpieczyć?

0

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

0

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.

0

hmm... czy w tych postach zawiera się odpowiedź na moje pytanie?

0
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ąć.

0

skrypt został na siłę uproszczony (chociaż... może by było prościej)
a średnik po zamykającej klamrze to taki nawyk :D

0

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

0

str_replace(Array('{links}', '{xxx}', '{jakiestam}'), Array($zamienlinks, $zamienxxx, $zamienjakiestam), $tekst);

0

Mógłbyś napisać jak to w całości ma wyglądac? Niepotrafię tego zrobić...

0

Jeszcze raz bardzo proszę o pomoc

0

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

0

yyy chyba nie.... ;p

0

;] na pewno nie,
a co? :>

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