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:
http:// i ftp://
.
Operacje na katalogach
Do tworzenia katalog≤w uzywamy funkcji mkdir, kt≤rej jako parametr podajemy jego nazwΩ. Je╢li operacja zako±czy siΩ sukcesem, funkcja zwr≤ci warto╢µ TRUE, w przeciwnym wypadku otrzymamy FALSE. Odwrotn▒ do niej jest funkcja rmdir. Jej r≤wnie┐ podajemy nazwΩ katalogu, tylko ┐e ona nie tworzy, a usuwa. Je╢li operacja zako±czy siΩ powodzeniem, zwr≤ci warto╢µ TRUE.
W PHP tak jak pliki, mo┐na r≤wnie┐ otwieraµ katalogi. U┐ywamy w≤wczas funkcji opendir. Jako parametr podajemy nazwΩ otwieranego katalogu. Funkcja zwr≤ci do niej uchwyt. Ka┐dy katalog trzeba zamkn▒µ i robimy to wywo│uj▒c funkcjΩ closedir z parametrem okre╢laj▒cym uchwyt. Do czytania zawarto╢ci katalogu u┐ywamy funkcji readdir. Jako parametr podajemy uchwyt. Funkcja zwraca nazwΩ znalezionej pozycji w otwartek kartotece. Oto przyk│ad:
<html>
<head>
<title>Lista katalog≤w</title>
</head>
<body>
<?
echo "Zawartosc katalogu ZIP:<br><br><ul>";
$uchwyt=opendir("zip");
while ($nazwa=readdir($uchwyt))
{
echo "<li><b>[ $nazwa ] </B><br>";
}
closedir($uchwyt);
echo "</ul>";
?>
</body>
</html>
W PHP funkcji wej╢cia-wyj╢cia jest jeszcze znacznie wiΩcej, m.in. umo┐liwiaj▒ce operowanie na plikach skompresowanych. Dok│adnie one om≤wione zosta│emy w manualu, do kt≤rego wszystkich Was odsy│am.