Często w naszych skryptach używamy zewnętrznych plików, umieszczonych na serwerze. PHP posiada ogromne możliwości do przetwarzania plików. Możemy za jego pomocą odczytywać, edytować lub zapisywać pliki.
Otwieranie plików
Do otwierania lub zapisywania plików służy funkcja fopen(), która pobiera dwa podstawowe argumenty. Pierwszy z nich to ścieżka do pliku, drugi natomiast to tryb otwarcia pliku, który zostanie opisany w dalszej części artykułu. Aby cokolwiek uczynić z plikiem zewnętrznym, musimy go najpierw otworzyć, i tu potrzebna jest wyżej wspomniana funkcja.
Tryb otwarcia pliku
Jak wspomniałem wcześniej funkcja fopen(), pobiera dwa podstawowe argumenty. W tej części artykułu zajmiemy się właśnie tym drugim, czyli trybem otwarcia pliku. System operacyjny serwera musi wiedzieć w jakim celu otwieramy plik. To właśnie tryb otwarcia pliku przekazuje mechanizmowi przetwarzania żądań dostępu ów metody.
Poniżej znajdują się wszystkie możliwe tryby otwarcia wraz z opisami:
r – tryb odczytu – otwarcie pliku do odczytu, zaczynając od początku pliku
r+ – tryb odczytu – otwarcie pliku do odczytu i zapisu, począwszy od początku pliku
a – tryb dodawania – otwarcie pliku do dodawania zawartości, począwszy od końca istniejącej. 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.
w – tryb zapisu – otwarcie pliku do zapisu począwszy od początku pliku. Jeżeli plik istnieje bieżąca wartość zostanie nadpisana, w przeciwnym wypadku nastąpi próba jego utworzenia.
w+ – tryb zapisu – otwarcie pliku do zapisu i odczytu, poczynając od początku pliku. Jeżeli plik istnieje bieżąca wartość zostanie nadpisana, w przeciwnym wypadku nastąpi próba jego utworzenia.
b – tryb binarny – stosowany w połączeniu z jednym z powyższych typów w wypadku korzystania z systemu rozróżniającego pliki tekstowe i binarne. Windows go rozróżnia, Uniks nie.
Przykładowe wywołanie funkcji fopen(), która otworzy nam plik krzasz.dat w trybie do odczytu:
| $fp = fopen(„krzasz.dat”, „r”); |
Problemy z otwieraniem plików
Chyba najczęstszym błędem związanym z otwieraniem pliku, jest próba otwarcia pliku do którego nie posiadamy praw odczytu lub zapisu. Należy w takim przypadku nadać skryptowi prawo dostępu do danego pliku. Jednak powyższy błąd nie jest jedyny, istnieje wiele innych błędów związanych z przetwarzaniem plików, jednak nie będę się tu rozpisywał na ich temat, gdyż jest on zbyt rozległy. Wspomnę tylko, że PHP wyświetla każdy błąd podczas interpretacji kodu, aby go stłumić należy na początku linii, umieścić znak @.
Zapisywanie danych do pliku
W PHP w celu zapisu danych najpierw należy otworzyć plik w celu zapisu lub dodawania, następnie należy użyć funkcji fwrite(); Pobiera ona dwa podstawowe parametry. Pierwszy z nich to wskaźnik pliku, zwracany przez funkcję fopen(); oraz drugi, czyli ciąg wyjściowy(dane zapisywane do pliku).
Przykładowy kod który dopisze jedną linię do pliku krzasz.dat:
| $fp = fopen(„krzasz.dat”, „w”); fwrite($fp, „Jedna linia pliku\n”); fclose($fp); |
Zamykanie pliku
W powyższym przykładzie użyłem funkcji fclose(), to właśnie ona zamyka plik. Po zakończeniu korzystania z pliku należy go zamknąć. Funkcja ta pobiera jeden argument, którym jest wskaźnik zamykanego pliku.
Odczyt z pliku
Aby odczytać wprowadzone wcześniej dane z pliku należy go otworzyć w trybie do odczytu.
Do odczytu pliku plików służą funkcję tj. fgets(), fgetss(), oraz fgetcsv(). Ja przedstawię działanie tej pierwszej. Aby odczytać cały plik należy użyć pętli, (najlepiej while) oraz w niej funkcji, która sprawdza, czy odczytaliśmy już cały plik. Funkcja ta to feof() pobiera ona wskaźnik odczytywanego pliku. Funkcja feof() zwraca true, jeżeli wskaźnik pliku znajduje się na jego końcu. Następnie za pomocą fgets(), która odczytuje plik linia po linii, należy pobrać dane z pliku. Funkcja ta pobiera dwa parametry pierwszy z nich to wskaźnik pliku, drugi to liczba bajtów, jaką ma odczytać funkcja.
UWAGA!!! Liczba bajtów odczytanych przez funkcje jest równa liczbie przekazanej do funkcji minus jeden bajt!
Przykładowy kod odczytujący cały plik krzasz.dat przedstawiłem poniżej:
| $fp = fopen(„krzasz.dat”, „r”); while(!feof($fp)){ echo fgets($fp, 4096); } fclose($fp); |
Na tym należy zakończyć nasz artykuł, jest to dopiero podstawa obsługi plików w PHP. Zapraszam zatem na kolejny artykuł poświęcony interakcji z systemem plików serwera w PHP. W razie jakichkolwiek kłopotów lub niejasności prosimy zadać pytanie na naszym .
