mariuseq
(mariuseq)
23 Maj 2012 06:34
#1
Projektuję prostą stronkę w XHTML 1.0 Strict. Wszystkie pliki mają rozszerzenie php. W pliku index.php jest taki fragment:
<?php
$id = $_GET['id'];
if(!empty($id)) {
if( (file_exists("$id.php")) && (preg_match('|^[[:alpha:]-]+$|', $id)) ) include "$id.php";
else include '404.php';
}
else include 'aktualnosci.php';
?>
W kodzie pliku mam zastosowane też takie odwołania i wszystko do tego momentu działa poprawnie:
Kalendarz[/code]
Problem pojawia się, kiedy w nazwie pliku są liczby, np. jest na serwerze plik [i]kalendarz2011.php[/i], ale odwołanie:
[code]Kalendarz
powoduje wyświetlenie strony z informacją o błędzie. Jeżeli zaś w adresie przeglądarki podam pełną ścieżkę do pliku, czyli www.adres-strony.pl/kalendarz2011.php , wówczas wyświetla się zawartość tego pliku.
W czym jest problem? Jak to rozwiązać? Nie jestem specem od php… Hosting mam na serwerze o12.
grzelix
(Grzelix)
23 Maj 2012 07:14
#2
Błąd leżu w wyrażeniu regularnym, nie spodziewasz się tam znaków numerycznych
preg_match('|^[[:alpha:]-]+$|', $id))
prawdopodobnie tak będzie wyglądała poprawka
preg_match('|^[[:alpha:]-0-9]+$|', $id))
ewentualnie doczytaj o wyrażeniach regularnych i uźyciu ich w metodzie preg_match
drobok
(Drobok)
23 Maj 2012 07:22
#3
Ew [:alpha:], można zamienić na [:alnum:]
a8o2ge
(A8o2ge)
23 Maj 2012 07:46
#4
preg_match zmienić na większy zakres.
mariuseq
(mariuseq)
23 Maj 2012 07:49
#5
Takie rozwiązanie okazało się prawidłowe. Dziękuję.
W międzyczasie znalazłem ciekawą informację o wyrażeniach regularnych .
drobok
(Drobok)
23 Maj 2012 07:51
#6
Takich stron jest masa. To alnum jest to po prostu krótszy zapisz tego co napisał grzelix
mariuseq
(mariuseq)
23 Maj 2012 08:15
#7
Zapewne ta, ja trafiłem na tamtą stronę. A wpisując proponowane pierwsze rozwiązanie
strona, nad którą pracuję zupełnie przestała się wyświetlać zgłaszając komunikat z błędem w linii, gdzie był ten kod.
Jak już pisałem - problem udało mi się rozwiązać z Waszą pomocą.
drobok
(Drobok)
23 Maj 2012 08:18
#8
Mi się zdaje, że nie powinno być myślnika po [:alpha:]. ogólnie od początku w twoim pierwszym preg_match. Ale to tylko moja opinia, nie testowana
Znak myślnika w wyrażeniu regularnym można użyć ale powinien on być na końcu zestawu znaków - czyli tak:
preg_match('|^[[:alpha:]0-9-]+$|', $id))
O ile oczywiście dopuszczamy litery, cyfry i znak myślnika w nazwie pliku (autor tak chciał - miał kod na to pozwalający) - czyli kalendarz-2012.php będzie akceptowane.