Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt zawartości strony
Skladowy
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 3.11.2011

Ostrzeżenie: (0%)
-----


Witam,
Pare lat temu interesowałem się robieniem stron, nawet nieźle mi szło ale studia + praca + żona (IMG:style_emoticons/default/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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Kostek.88
post
Post #2





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Kaloryfer 3.11.2011, 01:29:25
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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);
}
Go to the top of the page
+Quote Post
Kostek.88
post
Post #4





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dlatego napisalem chyba najlepsza metoda (IMG:style_emoticons/default/wink.gif) Ale oczywiscie masz racje. A co sadzisz o file_exists zamiast is_readable ?
Go to the top of the page
+Quote Post
by_ikar
post
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kostek.88
post
Post #6





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dzieki, poczytam sobie wieczorkiem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 07:09