Funkcje wej/wyj

OpiszΩ za chwile szereg bardzo u┐ytecznych funkcji wej╢cia-wyj╢cia, czyli pro╢ciej m≤wi▒c, funkcji s│u┐▒cych do tworzenia i operowania na plikach i katalogach. Trzeba pamiΩtaµ, ┐e by m≤c u siebie na stronie operowaµ tymi poleceniami, nale┐y mieµ w odpowiednich miejscach poustawiane poprawne prawa dostΩpu, w przeciwnym wypadku zawsze bΩdziemy widzieµ napis, ┐e nie mam odpowiednich uprawnie±.

--------------------
Otwarcie i zamkniΩcie pliku
--------------------

By m≤c co╢ zapisaµ, dopisaµ, albo odczytaµ z jakiego╢ pliku, trzeba go najpierw otworzyµ. S│u┐y do tego funkcja fopen. Jako jej pierwszy parametr podajemy nazwΩ pliku, jako drugi atrybut otwarcia. Mamy do dyspozycji nastΩpuj▒ce tryby:

Dodanie literki "b" za znakiem atrybutu oznacza tryb binarny.

Funkcj▒ fopen mo┐na otwieraµ pliki lokalne, mo┐na r≤wnie┐ zdalne i w≤wczas ich nazwΩ poprzedzamy odpowiednio: http:// lub ftp://. Nie wolno otwieraµ plik≤w do zapisu za pomoc▒ protoko│u http:.

Nasza funkcja zwraca uchwyt do danego pliku. Za jego pomoc▒ bΩdziemy siΩ p≤╝niej do niego odwo│ywaµ, dlatego powinni╢my go zapamiΩtaµ w jakiej╢ zmiennej. Oto przyk│ad:


$plik=fopen("1.txt","r");

$file=fopen("katalog/plik.doc","w");

$plik_x=fopen("http://www.wp.pl/index.html","r");

Czasami przed otwarciem pliku chcieliby╢my wiedzieµ, czy on istnieje. PHP daje nam tak▒ mo┐liwo╢µ. W celu sprawdzenia istnienia pliku wywo│ujemy funkcjΩ file_exists z parametrem okre╢laj▒cym nazwΩ sprawdzanego pliku. Je╢li zostanie on znaleziony - funkcja zwr≤ci TRUE, a w przeciwnym wypadku - FALSE.

Ka┐dy otwarty plik trzeba na koniec zamkn▒µ - by nie by│o ┐adnych b│Ωd≤w z dostΩpem do niego. Do tego celu u┐ywamy funkcji fclose. Podajemy jej jeden parametr - uchwyt do danego pliku.

--------------------
Odczytywanie
--------------------

By przeczytaµ plik, mamy kilka mo┐liwo╢ci. Funkcja fgetc, kt≤rej jako parametr podajemy uchwyt do pliku, zwraca jeden znak z niego przeczytany, dziΩki niej mo┐emy wiΩc czytaµ plik bajt po bajcie.

Do czytania linijkami, s│u┐y funkcja fgets. Jej r≤wnie┐ jako parametr (pierwszy) podajemy uchwyt do pliku, a jako drugi parametr podajemy liczbΩ okre╢laj▒c▒ ile znak≤w funkcja ma siΩ staraµ odczytaµ. Po jej wykonaniu zwr≤cony zostanie │a±cuch znak≤w. Zako±czenie czytania nastΩpuje z chwil▒ odnalezienia znaku ko±ca wiersza (czyli po przeczytaniu jednej linijki) lub po przeczytaniu podanej jako parametr liczby znak≤w.

Podobn▒ do opisanej wy┐ej jest funkcja fgetss. Ma identyczn▒ sk│adniΩ, ale ╢wietn▒ w│a╢ciwo╢µ ;) Nie zwraca │a±cucha bezpo╢rednio przeczytanego z pliku, a ≤w │a±cuch tylko po usuniΩciu z niego wszystkich znacznik≤w HTML i PHP.

Przy czytaniu plik≤w powy┐szymi funkcjami czΩsto zachodzi potrzeba sprawdzenia, czy czasem ju┐ wszystkiego nie przeczytali╢my. W PHP do tego s│u┐y funkcja feof. Jako parametr podajemy uchwyt do pliku, a ta zwr≤ci nam warto╢µ TRUE, kiedy osi▒gniemy jego pliku. Jest ona bardzo czΩsto u┐ywana, dlatego poka┐emy to na przyk│adzie:



$plik=fopen("1.txt","r");

while (!feof($plik))
{
   echo fgets($plik,64000);
}
fclose($plik);

Powy┐szy fragment wy╢wietli nam na ekranie ca│▒ zawarto╢µ pliku 1.txt

Do przeczytania pliku mo┐emy jeszcze u┐yµ jednej metody. Funkcji file. Jako parametr podajemy nazwΩ pliku, a ta zwr≤ci nam tablicΩ, w kt≤rej umieszczone bed▒ jego poszczeg≤lnie linijki. Jest bardzo praktyczna, gdy┐ nie trzeba go ani otwieraµ, ani zamykaµ.

--------------------
Zapisyanie
--------------------

Do zapisu u┐ywamy funkcji analogicznych do fgets, mianowicie funkcji fputs. Jako dwa parametry podajemy uchwyt i tre╢µ do zapisu. Przyk│ad:



$plik=fopen("1.txt","w");
 echo fputs($plik,"To jest tekst, ktory zostanie zapisany");
fclose($plik);

--------------------
Blokowanie
--------------------

W Internecie w tej samej chwili dan▒ stronΩ mo┐e czytaµ wiΩcej ni┐ tylko jedna osoba. Zdarza siΩ wiΩc, ┐e dany skrypt wykonywany jest kilka razy r≤wnolegle. Co siΩ dzieje, kiedy ka┐da z jego kopii pr≤buje co╢ zapisaµ, albo odczytaµ z jednegno pliku w tym samym czasie? Nic dobrego! Nale┐y siΩ przed tym zabezpieczyµ i my mamy tak▒ mo┐liwo╢µ. S│u┐y do tego funkcka flock

flock($file, mode);

Pierwszy argument okre╢la plik, natomiast drugi typ dostΩpu, jaki chcemy uzyskaµ. Mog▒ to byµ:

Kiedy jako mode podamy warto╢µ 4 funkcja zwr≤ci nam TRUE w przypadku, kiedy plik jest zablokowany i FALSE kiedy jest do odczytu.

--------------------
Inne funkcje
--------------------

Om≤wi│em podstawowe metody czytania i zapisu danych. Jest tego naprawdΩ bardzo du┐o, dlatego resztΩ funkcji (podstawowych) opiszΩ w telegraficznym skr≤cie: