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