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ć.
|