Operacje wejścia/wyjścia na plikach

Stronę tą wyświetlono już: 213 razy

Otwieranie pliku za pomocą funkcji fopen

Za pomocą funkcji fopen można otworzyć plik w kilku różnych trybach:

  • r - tylko do odczytu, wskaźnik pliku ustawiony jest na początku pliku;
  • w - tylko do zapisu. Usuwa zawartość pliku lub tworzy nowy jeżeli ten nie istnieje;
  • a - otwiera tylko do zapisu z zachowaniem danych w nim zawartych. Wskaźnik pliku jest ustawiony na jego końcu a plik w przypadku, gdy nie istnieje zostanie utworzony;
  • x - tworzy plik tylko do zapisu, zwraca FALSE, gdy plik już istnieje;
  • r+ - otwiera do odczytu i zapisu. Wskaźnik pliku zaczyna się na jego początku;
  • w+ - otwiera plik do odczytu i zapisu. Usuwa zawartość pliku lub tworzy nowy, jeżeli ten nie istniał;
  • a+ - otwiera plik do odczytu i zapisu. Dane w pliku (jeżeli ten istniał) zostaną zachowane a wskaźnik pliku ustawiony jest na jego koniec. Tworzy nowy plik, jeżeli ten nie istniał wcześniej;
  • x+ - otwiera plik do odczytu i zapisu. Zwraca fałsz, gdy ten już istnieje.

Przykład otwarcia pliku:

Listing 1
  1. <?php
  2. $file = $fopen("file_name.txt", "a+"); // otwieranie do odczytu i zapisu
  3. ?>

Wczytywanie danych linia po linii

W celu wczytania pojedynczej linii pliku należy skorzystać z funkcji fgets, oto przykład wczytania pojedynczej linii pliku:

Listing 2
  1. <?php
  2. $file = fopen("file_name.txt", "r");
  3. echo(fgets($file));
  4. ?>

Możliwe jest również wczytanie całego pliku linia po linii z użyciem funkcji feof:

Listing 3
  1. <?php
  2. $file = fopen("file_name.txt", "r");
  3. while(!feof($file)){
  4. echo(fgets($file));
  5. }
  6. ?>

Wczytywanie pliku znak po znaku

Istnieje również funkcja fgetc, która umożliwia wczytanie pojedynczego znaku pliku:

Listing 4
  1. <?php
  2. $file = fopen("file_name.txt", "r");
  3. while(!feof($file)){
  4. echo(fgetc($file));
  5. }
  6. ?>

Wczytywanie całej zawartości pliku

Cały plik można wczytać do zmiennej korzystając z funkcji fread:

Listing 5
  1. <?php
  2. $file = fopen("file_name.txt", "r");
  3. echo(fread($file));
  4. ?>

Zapis do pliku

Za pomocą funkcji fwrite możliwe jest zapisanie danych do pliku:

Listing 6
  1. <?php
  2. $file = fopen("file_name.txt", "w");
  3. $data = "Some data to save in file";
  4. fwrite($file, $data);
  5. ?>

Zamykanie pliku

We wszystkich powyższych plikach brakuje tylko zamknięcia pliku za pomocą funkcji fclose:

Listing 7
  1. fclose($file);

Zmiana położenia wskaźnika pliku

Czasami zachodzi konieczność zmiany położenia wskaźnika pliku. W tym celu należy posłużyć się funkcją fseek, która przyjmuje trzy parametry:

  • uchwyt pliku;
  • przesunięcie wskaźnika;
  • określenie punktu, względem którego przesunięcie zostanie ustawione. Możliwe ustawienia to:
    • SEEK_SET - ustawia położenie względem początku pliku (domyślnie ustawione);
    • SEEK_CUR - ustawia położenie względem obecnej pozycji wskaźnika pliku;
    • SEEK_END - ustawia położenie względem końca pliku

Przykład:

Listing 8
  1. <?php
  2. $file = fopen("file_name.txt", "w");
  3. $data = "Some data to save in file";
  4. fwrite($file, $data);
  5. $data = "Some data to save in file 2n";
  6. fseek($file, 0); // ustawia położenie wskaźnika pliku na jego początek
  7. fwrite($file, $data);
  8. fclose($file);
  9. ?>

Pozyskiwanie bieżącej pozycji wskaźnika pliku

Za pomocą funkcji ftell możliwe jest ustalenie położenie wskaźnika pliku:

Listing 9
  1. <?php
  2. $file = fopen("file_name.txt", "w");
  3. $data = "Some data to save in file";
  4. fwrite($file, $data);
  5. $data = "Some data to save in file 2n";
  6. fseek($file, 0); // ustawia położenie wskaźnika pliku na jego początek
  7. echo(ftell($file)); // wyświetla położenie wskaźnika pliku
  8. fwrite($file, $data);
  9. fclose($file);
  10. ?>

Komentarze