PHP/System plików: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m Wycofano edycje użytkownika 217.153.86.249 (dyskusja). Autor przywróconej wersji to 83.3.186.132.
Linia 38:
?></nowiki>
 
Zwróćmy uwagę na jakość podanych przykładów. Zmień nazwę plików, do których się odwołujemy, na jakiś nieistniejący. Oba skrypty wtedy zgłupieją. Pierwszy zaleje nas niekończącą się falą ostrzeżeń przez 30 sekund (potem przestaną się pojawiać), drugi zrobi ich "tylko" kilka (przyczyną jest brak pętli). Dlatego powinniśmy tak przygotować wszystko, abyśmy sami panowali nad komunikatami. Czas stworzyć prymitywną obsługę błędów. Wykorzystamy tutaj operator '''@''', aby zagłuszyć funkcję ''fopen()'' i sprawdzić zwracany wynik. Powinna ona zwrócić nam połączenie z plikiem, tj. wartość typu ''Resource''. Zobaczmy:
 
<nowiki><?php
 
$f = @fopen('inny_plik.txt', 'r') or die('Wystąpił błąd.');
if(!is_resource($f))
{
die('Nie udało się otworzyć podanego pliku do odczytu!');
}
echo fread($f, filesize('inny_plik.txt'));
Linia 62 ⟶ 57:
<nowiki><?php
 
$tresc = @file_get_contents('plik.txt') or die('Wystąpił błąd.');
if($tresc === false)
{
die('Nie udało się otworzyć podanego pliku do odczytu!');
}
echo $tresc;
Linia 76 ⟶ 66:
<nowiki><?php
 
$tresc = @file('plik.txt') or die('Wystąpił błąd.');
if($tresc === false)
{
die('Nie udało się otworzyć podanego pliku do odczytu!');
}
echo '<ul>';
Linia 116 ⟶ 101:
if (count($zawartosc)>0)
{
//nie rob nic. ta linijka jest tu po to, zeby to glupio nie wygladalo.
# ... dalszy kod aplikacji ...
}
else
{
echo die("plik: $plik jest pusty");
}
}
else
{
echo die("plik: $plik nie istnieje");
}
# ... dalszy kod aplikacji ...
?></nowiki>
 
Metoda na "pana nauczyciela" polega na pełnym obsłużeniu wszystkich możliwości jakie mogą wystąpić podczas czytania pliku oraz posłużenia się funkcjami typu file_exists(). Wadą takiego rozwiązania jest jednak to, że pisząc kod możemy zakopać się w if'ach gubiąc główny wątek programu ... a także nie jesteśmy w stanie wymyślić wszystkich możliwych sytuacji, które mogą się zdarzyć.
 
{{Uwaga|Staraj się nie stosować na produkcyjnych stronach rozwiązań w stylu "echo plik: $plik". W ten sposób ujawniasz napastnikowi strukturę swojego serwisu !}}
 
=== Zapis danych ===