Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt zawartości strony
Forum PHP.pl > Forum > PHP
Skladowy
Witam,
Pare lat temu interesowałem się robieniem stron, nawet nieźle mi szło ale studia + praca + żona biggrin.gif i jakoś straciłem kontakt.
W tamtych czasach używałem małego skryptu php do ładowania zawartości strony z plików txt ( które mogły posiadać kod php/html etc).
Dokładnie chodzi o skrypt który moge wstawić w miejscu gdzie standardowo znajdują się aktualności/zawartość pod stron abym nie musiał tworzyć 100 takich samych plików stron gdzie jedyna różnica to środek ( gdyż jak coś się zmieni to musiałbym ręcznie strone po stronie zmieniać).
Pamiętam że to było coś prostego na pare linijek w sensie załaduj plik *.txt z folderu *** i koniec, a strona była wstanie wyświetlić plik wykrywając html etc i tworząc wszystkie tabelki etc. Oczywiście tak abym mógł zrobić linki w stylu index.php?glowna.txt index.php?podstrona1.txt w many aby załadować poszczególne podstrony.
Byłbym niesamowicie wdzięczny jeśli ktoś mógłby taki mały skrypcik napisać.
Kostek.88
1. Robisz kilka plikow PHP, np. strona1.php, strona2.php, strona3.php

2. Wrzucasz w miejscu gdzie masz miec tresc:

  1. include($_GET['link'] . '.php');


3. Dodajesz linki
  1. <a href="index.php?link=strona1">strona 1</a>
  2. <a href="index.php?link=strona2">strona 2</a>
  3. <a href="index.php?link=strona3">strona 3</a>


4. Pozostaje Ci tylko pokombinowac co w wypadku gdy zmienna link jest pusta badz jej po prostu nie ma, np.

  1. if( ! isset($_GET['link']) || empty($_GET['link']) ) {
  2. include('glowna.php');
  3. } else {
  4. // to co podalem wyzej
  5. }


Ale jest jeszcze jeden problem: uzytkownik wpisuje celowo/przypadkowo w adres przegladarki ?link=strona50 i jest komunikat o bledzie. Moim zdaniem najprostsza i chyba najlepsza metoda na ich ukrycie to przed include dac po prostu @ , np.

  1. @include($_GET['link'] . '.php');


to samo tyczy sie glownej, ktora moze z jakiegos powodu nie byc wczytana...

Ogolnie polecam zapisywanie danych w plikach PHP, a nie TXT chocby z tego powodu, ze jesli uzytkownik znajdzie sciezke do pliku TXT to moze zajrzec w kod. A tak to dasz rozszerzenie PHP i wszystko co w PHP wpiszesz, lacznie z haslami w zmiennych, nie zostanie odnalezione.
by_ikar
Cytat
Ale jest jeszcze jeden problem: uzytkownik wpisuje celowo/przypadkowo w adres przegladarki ?link=strona50 i jest komunikat o bledzie. Moim zdaniem najprostsza i chyba najlepsza metoda na ich ukrycie to przed include dac po prostu @ , np.


To nie jest wcale najprostsza i najlepsza metoda, co najwyżej twoim zdaniem. Błędów się nie tłumi, tylko się je przewiduje i do nich nie dopuszcza!

Kod
$plik = isset($_GET['link']) ? $_GET['link'] : 'jakis_domyslny_plik';
$plik = basename($plik).'.php';

if(is_readable($plik))
{
    include($plik);
}
Kostek.88
Dlatego napisalem chyba najlepsza metoda wink.gif Ale oczywiscie masz racje. A co sadzisz o file_exists zamiast is_readable ?
by_ikar
is_readable załatwia dwie sprawy, sprawę tego czy dany plik/katalog istnieje i czy masz uprawnienia odczytu. Już w sumie oduczyłem się korzystania z file_exists na rzecz is_readable/is_writable. W tym przypadku kiedy nazwa pliku pochodzi od użytkownika, żeby nie mógł sobie wpisać co chce, używamy basename() żeby nie mógł się poruszać po katalogach: http://vivee.info/2008/10/20/jak-zabezpiec...le-include-rfi/ basname ukróci taką możliwość, zwracając tylko nazwę pliku, a jeżeli nie będzie go w katalogu (is_readable) to nie zostanie zaincludowany, można dodać else do tej instrukcji i wywalać jakiś błąd. Tak na szybko, bo generalnie można by dodać "na wszelki wypadek" jakieś jeszcze zabezpieczenia.

Tłumienie błędów raczej w żadnym wypadku nie ma najmniejszego sensu, bo generalnie każdy kod można napisać tak żeby skrypt nie robił to co chciał, ale robił dokładnie to co chcemy i nic poza to.

Na is_readable trzeba tez uważać, bo on nie sprawdza pliku, tylko pliki i katalogi, w przypadku błędnej ścieżki może również zwrócić true, ale jak już się o tych rzeczach wie to is_readable IMO jest lepszym wyborem.
Kostek.88
Dzieki, poczytam sobie wieczorkiem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.