Liczby w nazwie pliku php

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.

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

Ew [:alpha:], można zamienić na [:alnum:]

preg_match zmienić na większy zakres.

Takie rozwiązanie okazało się prawidłowe. Dziękuję.

W międzyczasie znalazłem ciekawą informację o wyrażeniach regularnych.

Takich stron jest masa. To alnum jest to po prostu krótszy zapisz tego co napisał grzelix :slight_smile:

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

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 :slight_smile:

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.