Rozdział 7. ♦ System plików 205
sposób, że wszystkie znaki końca linii \n są zamieniana na znaczniki <br>, dzięki czemu na stronie WWW każdy wpis będzie się znajdował w oddzielnym wierszu. Zawartość zmiennej str jest ostatecznie wysyłana do przeglądarki za pomocą instrukcji echo.
Skrypt dodaj.php, którego zadaniem jest odebranie przesłanych z formularza danych i zapisanie ich w pliku opinie.txt, został zaprezentowany na listingu 7.17. Kod rozpoczyna się od sprawdzenia, czy pod indeksem opinia w tablicy $_GET znajdują się jakieś dane (por. rozdział 5., sekcja „Metoda GET”). Jeśli danych nie ma, skrypt kończy działanie, wysyłając stosowny komunikat. Jeśli dane są obecne, plik opinie.łxt jest otwierany w trybie dopisywania — a, a ciąg znajdujący się pod indeksem opinia w tablicy $_GET, po usunięciu z niego ewentualnych znaczników HTML (funkcja strip_tags), jest zapisywany za pomocą instrukcji fwrite.
Listing 7.17. Skrypt obierający dane i zapisujące je w pliku opinie.txt <?php
if(!isSet($_GET["opinia"]) || $_GET["opinia"] == exit("Opinia nie została przesłana."):
if(!$fd - fopenCopinie.txt". 'ab')) exit("Błąd serwera. Opinia nie została zapisana.");
$str - strip_tags($_GET["opinia"]):
fwrite($fd.$str.''\n”);
fclose($fd):
echoCDziękujemy za przesłanie opinii.");
?>
Jak wiemy, odczyt danych z pliku powoduje przesuwanie wskaźnika pozycji w pliku, dzieje się to jednak automatycznie, bez wiedzy programisty. Istnieje jednak możliwość odczytania aktualnej pozycji tego wskaźnika, a także zmiany jego wartości. Służą do tego celu trzy funkcje: ftel 1, fseek i rewind. Funkcja ftel ł zwraca aktualną pozycję w pliku w postaci wartości typu int. Funkcji należy przekazać w postaci argumentu deskryptor pliku, otwartego za pomocą funkcji fopen. Na listingu 7.18 widoczny jest prosty skrypt, który odczytuje z pliku kolejne wiersze tekstu i wyświetla je, podając jednocześnie aktualną pozycję wskaźnika pliku.
listing 7.18. Wykorzystanie funkcji ftell do sprawdzenia aktualnej pozycji wskaźnika pliku <?php
if(!$fd - fopenCtest.txt'. 'r')) exit("Nie mogę otworzyć pliku test.txt"): whilet!feof($fd)){
$str - fgets(Sfd):
$pos - ftell(tfd):
echoCPo odczytaniu linii: \"$str\” wskaźnik pozycji w pliku ma wartość: $pos.<br>”);
i! }
fclose($fd):