Otwieranie pliku bez powodzenia

0

Mamy jakąś tam zmienną $login wprowadzaną przez użytkownika. W katalogu data/users znajduje się plik abc.usr. Po podaniu do formularza "abc" wyświetla się "Użytkownik abc nie istnieje", mimo że sam plik istnieje. W razie błędu z samym wczytaniem, pojawiłby się komunikat "Wystąpił błąd wczytywania pliku". Co robię nie tak?

@ $file = fopen("data/users/$login.usr", 'rb');
if (!$file) {
   echo "<div class=error>Wystąpił błąd wczytywania pliku. Spróbuj ponownie później.</div>";
}
   else if (file_exists($file)) {
   echo"<div class=good>Zalogowano!</div>";
   fclose($file);
}
else {
   echo "<div class=error>Użytkownik $login nie istnieje.</div>";
}
1

W Twoim $file jest zasób pliku ( co to zasoby? http://php.net/manual/en/language.types.resource.php )
file_exists przyjmuje jako parametr string z ścieżką do pliku, nie zasób.
file_exists to powinno być w ogóle pierwsze sprawdzenie u Ciebie.

PS. Filtrujesz jakoś ten $login, czy mogę wpisać w formularzu ../users/admin i w efekcie ścieżka będzie: data/users/../users/admin.usr?
Oraz czy zabezpieczaszh folder data (zapewne cały powinien być zabezpieczonyprzez jakieś.htaccess`) przed odczytem? Nawet jeżeli strony nigdy nie wypuścisz na świat - to ucz się dobrych nawyków. Pomijam fakt, że trzymanie danych o użytkownikach w pliku jest złym nawykiem.

0
dzek69 napisał(a):

W Twoim $file jest zasób pliku ( co to zasoby? http://php.net/manual/en/language.types.resource.php )
file_exists przyjmuje jako parametr string z ścieżką do pliku, nie zasób.
file_exists to powinno być w ogóle pierwsze sprawdzenie u Ciebie.

A co z race condition? Tutal akurat mało groźny przypadek, ale ja bym uważał. Powinno się głównie bazować na efektach wykonywania operacji, a nie sztucznych checkach.

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