Poznßvßnφ PHP

Prßce se soubory

K tomu, abychom mohli vytvß°et, mazat, zobrazovat soubory i slo₧ky musφme vyu₧φt souborovΘ (filesystemovΘ) funkce. Prßce s t∞mito funkcemi je opravdu jednoduchß a ukß₧eme si ji na p°φkladech.


FOpen

fopen( soubor, m≤d )

Pomocφ tΘto funkce m∙₧eme vytvo°it nov² nebo otev°φt ji₧ existujφcφ soubor na pevnΘm disku poΦφtaΦe nebo strßnku pomocφ http protokolu. S identifikßtorem (deskriptorem), kter² vrßtφ tato funkce v p°φpad∞ ·sp∞chu, budeme pracovat i v dalÜφch funkcφch. V p°φpad∞ ne·sp∞chu bude vrßcena hodnota FALSE.

Tato funkce mß dva parametry:

  1. soubor - udßvß jmΘno souboru (p°φpadn∞ webovou adresu), kter² chceme otev°φt.
  2. m≤d - jednß se o m≤d, ve kterΘm bude soubor otev°en:

Pokud budeme chtφt vytvß°et soubory a slo₧ky, m∞li bychom mφt takΘ nastavena dostateΦnß prßva na disk. P°i vytvß°enφ soubor∙ a slo₧ek pot°ebujeme prßvo write (zßpis). V∞tÜina poskytovatel∙ mß nastavena prßva pouze na Φtenφ a prßva na zßpis si musφme nastavit sami. UΦinφme tak na platform∞ Linux (Unix,...) nastavenφm pat°iΦn²ch prßv (Chmod) na vyhovujφcφ hodnotu. Na platform∞ Windows nastavφme na NTFS disku nastavenφm pat°iΦn²ch prßv pro skupinu Everyone.

P°φklad:


// Do prom∞nnΘ $fp ulo₧φ identifikßtor na otev°en² soubor "test.txt".
$fp = fopen("text.txt","r");

// Do prom∞nnΘ $fp ulo₧φ identifikßtor na otev°en² soubor na webovΘm serveru.
$fp = fopen("http://www.nejaky-server.cz/soubor.php","r");

// Do prom∞nnΘ $fp ulo₧φ identifikßtor na otev°en² soubor pro zßpis.
$fp = fopen("obrazek.gif","wb");



FClose

fclose ( deskriptor )

VÜechny otev°enΘ soubory je "pot°eba" zav°φt. Vyvarujeme se tak mnoha problΘm∙m, kterΘ by mohly nastat nekorektnφm zav°enφm.

P°φklad:


// Zav°e identifikßtor (deskriptor), kter² je ulo₧en v prom∞nnΘ $fp.
fclose($fp);


FileSize

filesize ( soubor )

Vrßtφ velikost lokßlnφho souboru v bajtech. Tuto funkci vyu₧ijeme nap°. p°i volßnφ funkce FRead.

P°φklad:


// Zjistφ velikost souboru data.txt.
filesize("data.txt");


FRead

fread ( deskriptor, dΘlka )

Pomocφ tΘto funkce m∙₧eme binßrn∞ p°eΦφst zvolen² soubor.

Tato funkce mß dva parametry:

  1. deskriptor - odkaz na zvolen² otev°en² soubor.
  2. dΘlka - udßvß poΦet bajt∙ dat, kterΘ budou ze zvolenΘho souboru p°eΦteny.

P°φklad:


// P°eΦte ze zvolenΘho souboru data.txt.
$fp = fopen("data.txt", "r");
$data = fread($fp, filesize("data.txt"));
fclose($fp);

echo $data;


FGetC

fgetc ( deskriptor )

Tato funkce vracφ jedin² znak ze zvolenΘho souboru.

P°φklad:


// P°eΦte ze zvolenΘho souboru data.txt.
$fp = fopen("data.txt", "r");
$data = fgetc($fp);
fclose($fp);

echo $data;


FGetS

fgets ( deskriptor, dΘlka )

Tato funkce p°eΦte jeden °ßdek o maximßlnφ velikosti dΘlka - 1 ze zvolenΘho souboru.

P°φklad:


// P°eΦte jeden °ßdek ze zvolenΘho souboru data.txt.
$fp = fopen("data.txt", "r");
$data = fgets($fp, 2000);
fclose($fp);

echo $data;


FGetSS

fgetss ( deskriptor, dΘlka )

Tato funkce p°eΦte jeden °ßdek o maximßlnφ velikosti dΘlka - 1 ze zvolenΘho souboru a odstranφ z n∞j HTML a PHP tagy.

P°φklad:


// P°eΦte jeden °ßdek ze zvolenΘho souboru data.txt.
$fp = fopen("data.txt", "r");
$data = fgetss($fp, 2000);
fclose($fp);

echo $data;


FPutS

fputs ( deskriptor, text )

Tato funkce zapφÜe zvolen² textov² °et∞zec do vybranΘho souboru. Tato funkce je identickß s funkcφ fwrite.

P°φklad:


// ZapφÜe do souboru data.txt text "testik".
$fp = fopen("data.txt", "w");
fputs($fp, "testik");
fclose($fp);


FSeek

fputs ( deskriptor, pozice )

Nastavφ ukazatel pozice v souboru zadanΘho pomocφ deskriptoru na zvolenou pozici.

P°φklad:


// Nastavφ pozici na zaΦßtek souboru.
fseek($fp, 0);


FEof

feof ( deskriptor )

Pomocφ tΘto funkce m∙₧eme testovat, zda je konec souboru. Funkce vracφ hodnotu TRUE pokud je dosßhnuto konce souboru.

P°φklad:


// P°eΦte data ze souboru.
$fp = fopen("data.txt", "w");
while (!feof($fp))
{
	$data .= fread($fp, 1024);
}
fclose($fp);

echo $data;


MKDir

mkdir ( nßzev, m≤d )

Pomocφ tΘto funkce vytvo°φme nov² adresß°.

Tato funkce mß dva parametry:

  1. nßzev - nßzev zvolenΘ slo₧ky.
  2. m≤d - prßva slo₧ky (chmod). Je pot°eba p°ed zvolen² m≤d p°idat nulu.

P°φklad:


// Vytvo°φ slo₧ku "test" s m≤dem "777".
mkdir("test", 0777);


RMDir

rmdir ( nazev)

Pomocφ tΘto funkce m∙₧eme smazat zvolen² prßzdn² adresß°.

P°φklad:


// Sma₧e adresß° "test".
rmdir("test");


Autentifikace

Pokud budeme chtφt vytvo°it urΦitou webovou aplikaci, ke kterΘ by m∞l p°istup zvolen² okruh lidφ, m∙₧eme vyu₧φt autentifikace, kterß je obsa₧ena v HTTP protokolu. Pomocφ PHP tak m∙₧eme jednoduÜe vytvo°it komplexnφ systΘm p°ihlaÜovßnφ.

Pokud budeme chtφt vyu₧φt autentifikace, musφ b²t PHP nainstalovßno jako modul webovΘho serveru (naÜe ·vodnφ instalace toto kritΘrium spl≥uje). Nynφ vyu₧ijeme funkce Header, abychom prohlφ₧eΦi odeslali po₧adavek o autentifikaci (objevφ se nßmi po₧adovanΘ okno).

Autentifikace

Prom∞nnΘ, se kter²mi budeme pracovat nalezneme v poli $_SERVER["PHP_AUTH_USER"] - u₧ivatelskΘ jmΘno a $_SERVER["PHP_AUTH_PW"] - u₧ivatelskΘ heslo. Pomocφ t∞chto prom∞nn²ch m∙₧eme sestavit SQL dotaz, kter² ov∞°φ v databßzi, zda mß u₧ivatel prßvo p°ihlßsit se do zvolenΘ sekce.

NßÜ p°φklad by mohl vypadat nßsledovn∞:


<?
/*
Ov∞°φme, zda prom∞nnß $_SERVER["PHP_AUTH_USER"] obsahuje n∞jakou hodnotu.
V p°φpad∞, ₧e neobsahuje, poÜleme hlaviΦky pro autentifikaci.
*/
If (!IsSet($_SERVER["PHP_AUTH_USER"]))
{
	Header("WWW-Authenticate: Basic realm=\"TajnΘ\"");
	Header("HTTP/1.0 401 Unauthorized");
	echo "Musφte se p°ihlßsit platn²m jmΘnem a heslem!";
	exit;
}
else
{
	// Porovnßme, zda u₧ivatel zadal sprßvnΘ ·daje.
	If ($_SERVER["PHP_AUTH_USER"] != "test" || $_SERVER["PHP_AUTH_PW"] != "test")
	{
		echo "Musφte se p°ihlßsit platn²m jmΘnem a heslem!";
		exit;
	}
}
?>
Tady ji₧ m∙₧e b²t zbytek HTML strßnky.


Do parametru realm v autentifikaΦnφ hlaviΦce m∙₧eme dosadit nap°φklad nßzev aplikace, kter² se zobrazφ v p°ihlaÜovacφm okn∞. V p°φpad∞, ₧e ji₧ p°ihlßÜenΘmu u₧ivateli poÜleme hlaviΦku s autentifikacφ (k≤dem 401), prohlφ₧eΦe (IE, NN) vyprßzdnφ cache s ulo₧en²mi p°ihlaÜovacφmi ·daji.


Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v poznßvßnφ jazyka PHP.

Petr Rympler