Operacje na plikach

Bardzo ważnym elementem języka PHP są operacje na plikach. Wprowadzanie dane przez użytkownika możemy zapisywać i w odpowiednim momencie wyświetlać. Pliki umieszczone na serwerze muszą mieć odpowiednie uprawnienia. Stworzony plik musi mieć prawo zapisu przez wszystkich użytkowników. W innym wypadku skrypt nie będzie działał. O więcej szczegółów możecie pytać administratora waszego serwera. Na początek stworzymy prosty skrypt który utworzy plik i zapisze w nim tekst :
<?
$plik = fopen("nazwa_pliku.txt","w");
fwrite($plik,"Ten tekst zapiszemy sobie do pliku");
echo "dane zapisane";
fclose($plik);
?>


Na początku powyższego skryptu otwieramy plik do zapisu w (write) (jeżeli plik nie istnieje zostaje utworzony), a cała jego zawartość usunięta. Pliki mogą mieć następujące atrybuty :
r - otwiera plik do odczytu
r+ - otwiera plik do odczytu i zapisu
w - kasuje zawartość pliku i otwiera go do zapisu
w+ - kasuje zawartość pliku i otwiera go do zapisu i odczytu
a - otwiera plik do dopisywania
a+ - otwiera plik do dopisywania i odczytu
Funkcją fopen możemy otworzyć plik na innym serwerze przez protokół http (tylko odczyt), lub ftp (odczyt lub zapis, ale nie jednocześnie). Pamiętać należy, że po zakończeniu pracy z plikiem należy go zamknąć funkcją fclose. Dane mamy już zapisane w pliku teraz należało by je odczytać. Jest kilka funkcji służących do odczytu z pliku. Pierwsza to fgetc czyli pobrane 1 znaku z pliku. Wywołujemy ją w ten sposób:

$znak = fgetc($plik);

Jeśli funkcja napotka koniec naszego pliku, zwróci wartość FALSE. Po odczytaniu znaku, pozycja w pliku jest przesuwana o 1 do przodu. Dzięki temu, po kolejnym wywołaniu tej funkcji  otrzymamy kolejny znak, a nie jeszcze raz ten sam.
Druga funkcja odczytu jest jest funkcja fgets. Odczytuje ona dane o określonej liczbie znaków z jednej linii :

$linia=fgets($plik, 50);

Trzecią funkcją do odczytu z pliku jest fread. Działa ona podobnie do fgets, z tym że nie przerywa czytania gdy natrafi na znak nowej linii. 
Jak do tej pory wszystko chyba jest proste. Jednak może dojść do takiego przypadku, że na naszej stronie będzie kilka osób i jednocześnie będą wykonywały ten sam skrypt. Do pliku może zostać wpisany chaos. Co wtedy ? Wtedy należy zastosować funkcję blokowania pliku jest to funkcja flock:

flock($plik, mode);

Pierwszy argument funkcji flock to identyfikator otwartego pliku. Argument mode określa typ dostępu, jaki chcemy uzyskać. Może mieć następujące wartości:
1 - dostęp do odczytu
2 - dostęp do zapisu
3 - zwolnienie blokady
 
Inne funkcje operujące na plikach (jeżeli przed zmienną $plik jest wstawione string, to znaczy, że należy tam podać ścieżkę dostępu, jeżeli zaś int, to należy wstawić wskaźnik pliku):

string basename(string $sciezka) - usuwa wszelkie nazwy kartotek poprzedzające nazwę pliku 
int chdir(string $kartoteka); - zmienia aktualną kartotekę na $kartoteka 
int chmod(string $plik, int $uprawnienia); zmienia prawa dostępu do $plik na $uprawnienia 
int chgrp(string $plik, mixed $grupa); - zmienia grupę do której należy $plik, na $grupa 
int chown(string $plik, mixed $user); - zmienia właściciela $plik na $user 
void clearstatcache(void $plik); - czyści pamięć podręczną statystyk $plik 
void closedir(int $uchwyt); - zamyka uchwyt kartoteki 
new dir(string $katalog); - zwraca klasę $katalog-u 
string dirname(string $sciezka); - zwraca ścieżkę katalogów 
int feof(int $plik); - sprawdza czy przekroczono koniec pliku, zwraca wartość TRUE jeżeli tak 
string fgetss(int $plik, $dlugosc); - kolejny sposób pobierania danych z pliku, działa tak samo jak fgets, tylko że usuwa znaczniki HTML'owe 
array file(string $plik); - odczytuje cały $plik i umieszcza jego zawartość w tablicy 
int file_Exists(string $plik); - sprawdza czy $plik istnieje 
int fileatime(string $plik); - zwraca czas ostatniego dostępu do $plik 
int filectime(string $plik); - zwraca czas modyfikacji i-węzła $plik-u 
int filegroup(string $plik); - określa grupę do której należy plik 
int fileinode(string $plik); - określa i-węzeł $plik-u 
int fileMtime(string $plik); - zwraca czas ostatniej modyfikacji pliku 
int fileOwner(string $plik); - określa identyfikator właściciela pliku 
int filePerms(string $plik); - zwraca prawa dostępu do pliku 
int fileSize(string $plik); - zwraca wielkość $plik-u 
string filetype(string $plik); - zwraca typ $plik-u 
mixed fpassThru(int $plik); - wyświetla całą zawartość pliku począwszy od położenia strumienia pliku 
int fputs(int $plik, string $lancuch); - wstawia łańcuch do $plik 
string fread(int $plik, int $ilosc); - odczytuje $ilosc znaków z $plik 
int ftell(int $plik); - zwraca wartość strumienia $plik-u 
bool is_dir(string $plik); - sprawdza czy podany plik jest kartoteką 
bool is_executable(string $plik); - sprawdza czy $plik jest plikiem wykonywalnym 
bool id_file(string $plik); - sprawdza czy $plik jest zwykłym plikiem 
bool is_link(string $plik); - sprawdza czy $plik jest połączeniem symbolicznym 
bool is_readable(string $plik); - sprawdza czy można odczytać zawartość $plik-u 
bool is_writeable(string $plik); - sprawdza czy do $plik-u można coś zapisać 
int link(string $cel, string $nazwa); - tworzy "twarde" połączenie 
int linkinfo(string $sciezka); - zwraca informacje o połączeniu 
array lstat(string $plik); - pobiera informacje dotyczące pliku 
int mkdir(string $nazwa, int $tryb); - tworzy kartotekę 
int opendir(string $nazwa); - zwraca uchwyt do kartoteki 
int pclose(int $potok); - zamyka potok procesu 
int popen(string $polecenie, $tryb); - otwiera potok procesu 
string readdir(int $nazwa); - odczytuje jeden element z kartoteki 
int readfile(string $plik); - wyświetla zawartość $plik-u 
string readlink(string $sciezka); - zwraca plik docelowy połączenia symbolicznego 
int rename(string $plik, $nowa_nazwa); - zmienia nazwę $plik-u 
int rewind(int $plik); - ustawia strumień pliku na początku pliku 
void rewinddir(int $uchwyt); - przesuwa wskaźnik położenia na początek kartoteki 
int rmdir(string $kartoteka); - usuwa kartotekę 
array stat(string $plik); - zwraca tablicę informacji o pliku 
int symlink(string $cel, $polaczenie); - tworzy połączenie symboliczne 
string tempnam(string $sciezka, $prefiks); - tworzy unikalną nazwę pliku 
int touch(string $plik, int $czas); - określa czas modyfikacji pliku 
int umask(int $maska); - zmienia aktualną u-maskę 

Dużo tych funkcji, ale nie przestraszcie się wszystkich na pewno nie będziecie używać. 


<? Wprowadzenie ?> <? Składnia ?> <? Funkcje ?> <? Zmienne typu STRING ?> <? Warunki i Pętle ?> <? Formularze ?>  <? Operacje na plikach ?> <? Klasy ?> <? Cookies ?> <? Obsługa plików GIF ?> <? Przykład 1 - Księga Gości ?> <?  Przykład 2 - Licznik tekstowy ?> DODATEK : <? Funkcje MySQL ?>