Operacje na plikach
W tym artykule nauczymy się działać na plikach tzn. odczytywać ich zawartość, zapisywać itd.
Etapy odczytu i zapisu pliku
Zapis pliku
- Otwarcie pliku, jeśli nie istnieje należy go utworzyć
- Zapisanie danych w pliku
- Zamknięcie piku
Odczyt pliku
- Otwarcie pliku
- Odczyt danych z pliku
- Zamknięcie pliku
Tryby otwarcia pliku w funkcji fopen
| Tryb | Opis |
|---|---|
| r | Tryb odczytu - otwarcie pliku do odczytu poczynając od jego początku |
| r+ | Tryb odczytu - otwarcie pliku do odczytu i zapisu poczynając od jego początku |
| w | Tryb zapisu - otwarcie pliku do zapisu poczynając od jego początku. Jeżeli plik istnieje bieżąca zawartość zostaje skasowana. W przeciwnym wypadku nastąpi próba jego utworzenia. |
| w+ | Tryb zapisu - otwarcie pliku do zapisu i odczytu poczynając od jego początku. Jeżeli plik istnieje bieżąca zawartość zostaje skasowana. W przeciwnym wypadku nastąpi próba jego utworzenia. |
| a | Tryb dodawania - otwarcie pliku do dodawania zawartości począwszy od końca istniejącej zawartości. Jeżeli plik nie istnieje nastąpi próba jego utworzenia. |
| a+ | Tryb dodawania - otwarcie pliku do dodawania zawartości i odczytu począwszy od końca istniejącej zawartości. Jeżeli plik nie istnieje nastąpi próba jego utworzenia. |
| b | Tryb binarny - stosowany w połączeniu z jednym z powyższych typów w przypadku korzystania z systemu rozróżniającego pliki tekstowe i binarne. Windows go rozróżnia, Uniks nie. |
Teraz przedstawię skrypt tworzący prosty "notatnik online" na którym będę tłumaczył użyte funkcje.
![]()
![]()
$notatka = $_POST['notatka'];
![]()
//sprawdzenie czy zmienna istnieje (isset())
if( isset($notatka) ){
![]()
$not = fopen("notatnik.txt", 'w');
fwrite($not, $notatka);
fclose($not);
![]()
}
![]()
![]()
<form action="notatnik.php" method="post">
<textarea name="notatka" cols="40" rows="10">
<!-- odczytanie zawartości pliku -->
readfile("notatnik.txt");
</textarea><br />
<input type="submit" value="Zapisz">
</form>
Odczyt pliku
W tym przykładzie zastosowałem funkcje readfile, która odczytuje cały plik za jednym razem.
Prototyp funkcji readfile
int readfile(string nazwa_pliku, int [include_path]);
Funkcja ta zwraca całkowitą liczbę bajtów odczytaną z pliku, a w miejscu jej użycia wyświetla całą zawartość pliku.
Inne funkcje wykorzystywane do odczytywania danych z pliku:
Cały plik za jednym razem
Wiersz po wierszu
Poniżej znajduje się kod odczytujący ten sam plik tylko za pomocą funkcji fgets.
![]()
//otwarcie pliku i przypisanie wskaźnika do zmiennej $w
$w = fopen("notatnik.txt", 'r');
![]()
//pętla wciągająca wiersz po wierszu
while(!feof($w)){
![]()
//funkcja fgets pobiera wskaźnik pliku oraz długość stringu
$zawartosc = fgets($w, 999);
echo $zawartosc.'<br />';
![]()
}
![]()
//zamknięcie pliku
fclose($w);
![]()
fopen
Pobiera nazwę pliku wraz z rozsezeniem, który ma otworzyć oraz tryb otwarcia.
feof
Sprawdza kiedy następuje koniec pliku i zwraca wartość true.
fclose
Zamyka otwarty plik, jako parametr pobiera wskaźnik pliku.
Zapis do pliku
Zapis do pliku przebiega bardzo podobnie do odczytu z tą różnica że należy nadać inny tryb otwarcia pliku oraz użyć funkcji fwrite, która zapisze określony ciąg znaków w pliku.
![]()
$not = fopen("notatnik.txt", 'w'); //ad.1
fwrite($not, $notatka); //ad.2
fclose($not); //ad.3
![]()
ad.1 - otwarcie pliku notatnik.txt w trybie w
ad.2 - użycie funkcji fwrite do zapisania ciągu znaków w pliku.
Prototyp funkcji fwrite
int fwrite(int wskaznik_pliku, string ciąg, int [dugosc]);
W moim przypadku ciągiem który ma być umieszczony w pliku jest ciąg pochodzący z formularza.
ad.3 - zamkniecie pliku.
Inne przydatne funkcje plikowe
file_exists - sprawdza istnienie pliku
![]()
if (file_exists("notatnik.txt"))
echo 'Plik istnieje, odczytanie możliwe.';
else
echo 'Niestety, brak pliku!';
![]()
filesize - określa wielkość pliku
![]()
echo filesize("notatnik.txt");
![]()
unlink - kasowanie pliku
![]()
unlink("notatnik.txt");
![]()










