Podstawy PHP i MySQL
Temat 10 - Wykorzystanie zewnętrznych plików tekstowych
Powrót do spisu tematów


W tym rozdziale:

  1. Funkcje otwierające plik tekstowy, czytające i zapisujące do plików tekstowych
  2. Funkcja include()
Dlaczego pliki zewnętrzne?

Chodzi o wykorzystanie plików tekstowych w dwojaki sposób.
Jedne z nich potrafią przechowywać dane, nazywamy to płaskimi bazami danych (w odróżnieniu od relacyjnych). Inne przechowują kod skryptów, które mogą być wykorzystywane przez nasze skrypty.

Czytanie treści z zewnętrznych plików tekstowych

Aby przeczytać treść pliku tekstowego, należy go otworzyć, służy do tego funkcja fopen().
Jako pierwszy parametr podajemy nazwę otwieranego pliku (wraz ze ścieżką, jeśli potrzebne), drugi parametr określa sposób otwarcia pliku:
r - otwarcie pliku tylko do odczytu,
w - otwarcie pliku do odczytu i zapisu, zawartość pliku zostaje wykasowana,
a - otwarcie pliku do zapisu.

W pracy z zewnętrznymi plikami tekstowymi będziemy wykorzystywać tzw. zaczepy. Zaczep to zmienna, która przechowuje działanie funkcji (np. funkcji otwierającej plik tekstowy).

Funkcja fread() służy do przeczytania zawartości pliku tekstowego. Ma ona dwa parametry: pierwszy oznacza co czytamy, drugi ile znaków będzie czytanych z pliku.

Zanim zaczniemy otwierać i czytać plik zewnętrzny, warto sprawdzić, czy w ogóle oczekiwany plik istnieje. Przydatną będzie tu funkcja file_exists(), gdzie parametrem jest nazwa pliku (jeżeli potrzeba wraz ze ścieżką dostępu.

ćwiczenie 10_01 - Czytanie pliku tekstowego

  1. Należy umieścić na swoim koncie WWW pliki 10_01.php i 10_01.txt (do pobrania tutaj 10_01.zip)
  2. Należy uruchomić skrypt, następnie zmienić treść pliku tekstowego 10.01.txt i powtórnie uruchomić skrypt.
  3. Należy (na chwilę) usunąć z dysku plik 10_01.txt i  sprawdzić działanie skryptu 10_01.php
  4. Należy przeanalizować kod pliku 10_01.php

Czytanie dłuższych fragmentów plików tekstowych

Często zdarza się, że nie wiemy, jaki długi tekst przechowywany jest w pliku tekstowym. W powyższym rozwiązaniu musieliśmy podać liczbę czytanych znaków. Funkcja filesize() zwraca długość tekstu przechowywanego w pliku tekstowym podanym jako parametr tej funkcji.

ćwiczenie 10_02 - Czytanie całego pliku tekstowego

  1. Należy umieścić na swoim koncie WWW pliki 10_02.php i 10_02.txt (do pobrania tutaj 10_02.zip)
  2. Należy uruchomić skrypt, w skrypcie należy zwrócić uwagę na sposób łamania linii tekstu.

Zapisywanie do pliku tekstowego

Użytkownik strony może zapisać informacje do pliku tekstowego. Zanim jednak przygotujemy odpowiedni skrypt, należy zwrócić uwagę na ustawienie odpowiednich uprawnieñ do pliku tekstowego, do którego użytkownik ma mieć prawo zapisu.
Serwery zwykle dają możliwość właścicielowi konta (np. poprzez połączenie ftp) zmieniać atrybuty plików (tzw. chmod). Jeżeli jest to niemożliwe, należy skontaktować się z administratorem serwera, na którym publikuje się skrypty.
W warunkach domowych (serwery instalowane na komputerze z systemem Windows - patrz Dodatek nr 1) nie trzeba ustawiać szczególnych uprawnieñ do plików tekstowych.

Aby zapisać do pliku tekstowego należy otworzyć go za pomocą funkcji fopen() z parametrem "a" lub "w". Użycie pierwszego z nich umożliwia dopisanie nowych wartości do pliku. Użycie drugiego "w" powoduje skasowanie dotychczasowej zawartości pliku i umożliwi wpisanie nowej.

Funkcją odpowiedzialną za zapisywanie do pliku jest funkcja fwrite(). Podajemy dwa parametry: zaczep otwartego pliku tekstowego oraz treść, jaka ma zostać zapisana.

ćwiczenie 10_03 - Licznik odwiedzin strony (rozwiązanie I)

  1. Należy umieścić na swoim koncie WWW pliki 10_03.php i 10_03.txt (do pobrania tutaj 10_03.zip)
  2. Plik 10_03.txt należy umieścić w przygotowanym folderze "pliki"
  3. Należy uruchomić skrypt, następnie kilka razy odświeżyć stronę.
  4. Należy przejrzeć zawartość pliku tekstowego oraz skrypt zwracając uwagę na komentarze.

ćwiczenie 10_04 - Licznik odwiedzin strony (rozwiązanie II)

  1. Należy umieścić na swoim koncie WWW pliki 10_04.php i 10_04.txt (do pobrania tutaj 10_04.zip)
  2. Plik 10_04.txt należy umieścić w przygotowanym folderze "pliki"
  3. Należy uruchomić skrypt, następnie kilka razy odświeżyć stronę.
  4. Należy przejrzeć zawartość pliku tekstowego oraz skrypt zwracając uwagę na komentarze.

Porównanie obu rozwiązañ

Jak wyglądają zapisy plików tekstowych obu rozwiązañ po kilkukrotnym uruchomieniu każdej ze stron (należy przeglądnąć).
W pierwszym rozwiązaniu za każdym uruchomieniu strony zostaje dopisany jeden znak do trybu tekstowego. Wyświetlenie licznika polega na zliczeniu znaków przechowywanych w pliku tekstowym.
W drugim rozwiązaniu zostaje najpierw przeczytana wartość przechowywana w pliku tekstowym, następnie zostaje zwiększona o jeden, po czym nowa wartość nadpisuje poprzednią w pliku tekstowym.

Blokowanie dostępu do pliku

Może zdarzyć się sytuacja, gdy w tym samym czasie następuje próba zapisania danych do tego samego pliku. Grozi to utratą przechowywanych danych. W tym celu skrypt powinien po otwarciu pliku zablokować go do zapisu przez innych użytkowników. Służy do tego funkcja flock(). Posiada ona dwa parametry, pierwszy z nich to nazwa pliku tekstowego, drugi:
1 - blokowanie odczytu,
2 - blokowanie zapisu,
3 - zwolnienie blokady

Jeżeli plik zostanie zablokowany, nastąpi wstrzymanie pracy skryptu, który w tym samym czasie będzie przeprowadzać operację zapisu. Plik tekstowy powinien być blokowany oczywiście przez jak najkrótszy czas.

ćwiczenie 10_05 - Sonda (*)

  1. Należy umieścić na swoim koncie WWW pliki 10_05.php, 10_05a.txt, 10_05b.txt 10_05a.jpg i 10_05b.jpg (do pobrania tutaj 10_05.zip)
  2. Pliki 10_05a.txt i 10_05b.txt należy umieścić w przygotowanym folderze "pliki"
  3. Należy uruchomić skrypt i oddać kilka głosów (za i przeciw).
  4. Należy przeanalizować kod skryptu ze zwróceniem uwagi na sposób blokowania i odblokowywania plików tekstowych.
  5. Należy dodać trzecią odpowiedŸ (np. nie mam wyrobionego zdania) i tak zmodyfikować skrypt, aby zostały wyświetlone wyniki biorące pod uwagę trzy możliwe odpowiedzi.

Znak koñca wiersza

Przydatną może okazać się funkcja nl2br(); służy do zamiany znaków koñca wiersza (efekt użycia klawisza Enter) na HTML-owe znaczniki <BR>
Przykład użycia funkcji:

<?php
$tresc_ksiegi=nl2br(tresc_ksiegi);
echo"$tresc_ksiegi";
?>

Zadanie 12 - Księga gości

  1. Należy umieścić na swoim koncie WWW plik zadanie12.php
  2. Należy zwrócić uwagę na następujące:
    - najnowsze wpisy powinny pojawiać się na górze księgi gości,
    - honorowanie użycia klawisza Enter w treści wiadomości
  3. Przykład działania skryptu można obejrzeć tutaj (wymagane połączenie z Internetem).

Inkludowanie pliku zewnętrznego

Innym rodzajem korzystania z zewnętrznych plików tekstowych jest tzw. inkludowanie. W odróżnieniu od poprzedniego sposobu - w plikach inkludowanych możemy zamieszczać kod PHP, który zostanie uruchomiony przez skrypt inkludujący.
W jakim celu stosuje się tę metodę?
1. W plikach zewnętrznych można przechowywać fragmenty kodu, które często wykorzystywane są w różnych miejscach witryny.
2. Pliki z kodem można przechowywać w katalogu na dysku, do którego nie ma dostępu użytkownik internetowy, w taki sposób chronimy kod PHP, który nie chcemy, aby dostał się w niepowołane ręce.

Pliki tego typu mają zwykle rozszerzenie .inc. Funkcja pozwalająca wczytać pliki zewnętrzne - include() - gdzie parametrem jest nazwa pliku wczytywanego (ewentualnie także ścieżka do tego pliku). 

ćwiczenie 10_06 - Wczytywanie plików zewnętrznych

  1. Należy umieścić na swoim koncie WWW pliki 10_06.php i 10_06.inc (do pobrania tutaj 10_06.zip)
  2. Plik10_06.inc należy umieścić w przygotowanym folderze "inc"
  3. Należy uruchomić skrypt i sprawdzić jego działanie.
  4. Należy podejrzeć kod znajdujący się w obu plikach i przeanalizować treść skryptów zwracając szczególną uwagę na zamieszczone komentarze.

Zadanie 13 - Umieszczenie stałych elementów witryny w zewnętrznych plikach tekstowych

  1. Należy przygotować plik o nazwie naglowek.inc i umieścić go w katalogu inc.

  2. W pliku należy umieścić kod, który powtarza się na wszystkich przygotowanych do tej pory podstronach.

  3. Wszystkie ćwiczenia wykonane do tej pory powinny skorzystać z kodu (inkludować) umieszczonego w pliku nalgowek.inc.

Do zapamiętania

  1. Aby skrypty mogły zapisywać do plików tekstowych na dysku, należy ustawić odpowiednie uprawnienia do tych plików.

 


Powrót do spisu tematów