Základy PHP Úvod do jazyka PHP a principů skriptování na straně serveru
Princip fungování web serveru Server se podívá do svého datového úložiště…
Hypertext Transfer Protocol Nalezne požadovaný soubor…
Internet Internet klient webový server
Stránka …
A jeho obsah pošle jako odpověď klientovi.
verze 1.0
© 2008, Martin Kruliš
2
Common Gateway Interface
CGI je rozhraní mezi HTTP serverem a aplikacemi, které dovoluje získávat obsah dynamicky.
CGI rozhraní je nezávislé na implementaci serveru.
Obsah je získán jako výstup CGI aplikace. Definuje pouze způsob spouštění aplikací a předávání dat.
Je to standard W3C.
CGI aplikací může být cokoliv.
verze 1.0
Kompilovaná aplikace napsaná v libovolném jazyce (C, C++, …). Interpretovaná aplikace (tzv. skript) – PHP, Perl, Python, Ruby …
© 2008, Martin Kruliš
3
Common Gateway Interface Server spustí CGI aplikaci a předá ji HTTP požadavek…
Hypertext Transfer Protocol
CGI aplikace CGI aplikace vygeneruje obsah stránky…
Internet Internet klient webový server
Stránka …
Stránka se předá serveru a ten ji pošle klientovi jako odpověď.
verze 1.0
© 2008, Martin Kruliš
4
Interpretované CGI skripty Nalezený soubor se skriptem předá interpretu…
Server se podívá do svého datového úložiště…
Hypertext Transfer Protocol Zároveň předá interpretu HTTP požadavek (přes CGI)
Internet Internet klient webový server
Stránka se pošle jako odpověď klientovi.
verze 1.0
© 2008, Martin Kruliš
Stránka …
Interpret zpracuje skript a vygeneruje stránku
5
Jazyk PHP
Jazyk PHP (PHP: Hypertext Preprocessor) je skriptovací jazyk, který je přímo navržen pro použití s web. serverem. Obsahuje celou řadu vestavěných funkcí, které mají programátorovi usnadnit práci s webem. Je jedním z nejrozšířenějších.
Jednoduchý a zároveň pokrývá všechny potřeby programátora. Zdarma (interpret, dokumentace, moduly…).
Existují i jiné jazyky určené (použitelné) pro web:
verze 1.0
Java, ASP (.NET), Perl, Python, Ruby (on Rails), … © 2008, Martin Kruliš
6
Kombinování PHP a HTML
PHP, jak již název napovídá, funguje jako preprocesor jazyka HTML. Vkládá se do HTML kódu pomocí značek . Při zpracování PHP interpretem se bloky PHP kódu vyjmou, zpracují a jejich výstup se vloží na místo původního kódu. PHP má však vyšší prioritu, takže lze např. ohraničovat a podmiňovat zobrazení HTML kódu.
verze 1.0
© 2008, Martin Kruliš
7
Výstup z PHP
Výstup z PHP se provádí příkazy echo a print.
echo je konstrukce jazyka a umí zpracovat i více argumentů, print() je funkce a může dostat pouze jeden argument.
PHP příklad
PHP příklad
Text z PHP.
verze 1.0
© 2008, Martin Kruliš
8
Podmiňování a iterace HTML kódu
Ukázka PHP
Ukázka PHP
Podmíněný nadpis
} ?> for ($i=1; $i<4; $i++) { ?>
echo $i; ?>
} ?>
Podmíněný nadpis
1
2
3
verze 1.0
© 2008, Martin Kruliš
9
Vkládání souborů
Vkládání souborů zajišťují funkce include() a require(). V místě, kde jsou použity PHP, interpret vloží obsah specifikovaného souboru a začne jej zpracovávat.
include() vloží obsah souboru těsně za sebe require() vloží obsah souboru místo sebe Existují alternativy include_once() a require_once(), které hlídají, aby nebyl jeden soubor vložen vícekrát.
Při zahájení zpracování vloženého souboru se automaticky uzavře PHP blok (automaticky se doplní značka ?>).
verze 1.0
Tzn. HTML se vloží správně, PHP musí být uzavřeno do . © 2008, Martin Kruliš
10
Proměnné
Proměnné jsou v PHP uvozeny znakem $. Za ním následuje identifikátor proměnné, který smí obsahovat písmena, číslice a znak podtržítko. Proměnné se nemusí deklarovat. Definují se prvním přiřazením do proměnné. Funkce isset($var) zjišťuje, zda již byla proměnná $var definována. Funkce unset($var) odstraní proměnnou $var.
verze 1.0
© 2008, Martin Kruliš
11
Datové typy
Proměnné nemají pevně definován datový typ.
Existují čtyři základní datové typy:
Datový typ je určen obsahem proměnné a může se měnit.
integer – celé číslo float (double) – desetinné číslo s plovoucí čárkou bool – pravdivostní hodnota (může být pouze true, nebo false) string – řetězec znaků libovolné délky
Základní datové typy lze konstruovat jednoduchými výrazy: $a = 5;
verze 1.0
$b = 3.14;
$c = true;
© 2008, Martin Kruliš
$d = 'řetězec';
12
Další datové typy
Dále existují dva složené datové typy:
A ještě dva speciální datové typy
array – jednorozměrné pole object
null – datový typ, který může obsahovat pouze hodnotu null resource – externí zdroj (např. otevřený soubor)
Proměnné, které nebyly deklarovány nebo byly smazány příkazem unset(), mají z hlediska programátora hodnotu null. Hodnota null znamená „hodnota není definována“.
verze 1.0
© 2008, Martin Kruliš
13
Řetězce
Řetězce se zapisují buď do apostrofů, nebo do uvozovek. Uvnitř apostrofovaných řetězců nesmí stát samostatně apostrof (je třeba před něj napsat zpětné lomítko).
Všechny ostatní znaky nemají zvláštní význam.
Řetězce zapsané v uvozovkách mají tyto vlastnosti:
verze 1.0
Některé znaky mají zvláštní význam (\n, \t, …). Znak uvozovky musí být ošetřen zpětným lomítkem. Lze do nich vkládat proměnné (ty se převedou na řetězec a vloží se do kódu).
© 2008, Martin Kruliš
14
Zjišťování typu proměnné
Funkce gettype() vrací typ proměnné jako řetězec.
"boolean", "integer", "double", "string" …
Dále existuje řada funkcí, které otestují, zda je proměnná konkrétního typu (dle funkce):
is_array() is_boolean() is_int() is_string() is_scalar() is_null()
…
verze 1.0
© 2008, Martin Kruliš
15
Přetypování
PHP podporuje automatické přetypování.
Pravidla jsou celkem složitá. Zde je pár zajímavých:
Tzn. pokud je potřeba změnit typ proměnné, PHP ji automaticky změní podle daných pravidel
Cokoliv lze přetypovat na bool. Skaláry (základní typy) lze přetypovat na string. string lze přetypovat na číslo (celé i desetinné).
Přetypovávat lze i explicitně (uvedením typu před výrazem). $str = (string)($x + 10);
verze 1.0
© 2008, Martin Kruliš
16
Pole
Pole v PHP jsou plně dynamická.
Hodnoty prvků v poli nemají pevně daný datový typ.
Nespecifikuje se jejich velikost a prvky lze libovolně přidávat a odebírat.
Tzn. mohou být libovolného typu (a každá položka jiného). Tímto způsobem lze pole skládat a vytvářet pole vícerozměrná.
Pole se indexují celými čísly a řetězci.
verze 1.0
Oba typy indexů lze kombinovat. Pole se chová spíše jako slovník než jako pole z jiných programovacích jazyků.
© 2008, Martin Kruliš
17
Pole – syntax
Pole se vytváří funkcí array(). $pole = array(1,2,3);
$pole2 = array(1=>5, 'a'=>2);
K položkám pole se přistupuje přes klasickou [] notaci. $hodnota = $pole['klic'];
Prvky se vytvářejí prvním přiřazením nebo přiřazením s automatickým indexem. $pole['klic'] = 'hodnota'; $pole[] = 42;
Položky pole lze odstranit příkazem unset().
verze 1.0
© 2008, Martin Kruliš
18
Pole - procházení
Každé pole má vnitřní ukazatel, který lze posouvat a procházet s ním prvky pole. Manipulovat s ním umí funkce:
current() – vrací aktuální prvek key() – vrací aktuální klíč reset() – vrátí ukazatel na první položku pole end() – přesune ukazatel na poslední prvek pole next() – posune ukazatel na následující prvek pole prev() – posune ukazatel na předchozí prvek pole
K procházení lze také použít řídící strukturu foreach.
Pořadí prvků v poli odpovídá pořadí jejich vkládání.
verze 1.0
© 2008, Martin Kruliš
19
Pole – další vlastnosti
Pole nahrazují celou řadu dalších datových struktur:
spojové seznamy hašovací tabulky FIFO, LIFO stromy struktury a objekty (ale to není příliš výhodné)
Existuje obrovské množství funkcí pro práci s poli.
verze 1.0
přidávání, odebírání prvků vyhledávání třídění slévání a podobné úpravy … © 2008, Martin Kruliš
20
Data z HTTP požadavku
PHP obsahuje tzv. HTTP wrapper, který zapouzdřuje práci s protokolem HTTP a stará se o řadu dalších věcí.
Potřebná data jsou uložena v následujících polích
Především umístí všechna data z HTTP do přehledných struktur.
$_GET – data z URL (zaslaná metodou GET) $_POST – data zaslaná aktivně (metodou POST) $_COOKIE – cookies z klientova prohlížeče $_SERVER – další informace (o serveru, o HTTP požadavku…)
Všechna výše uvedená pole jsou "super-globální" (dostupná v libovolné části kódu).
verze 1.0
© 2008, Martin Kruliš
Příklad 1 21
Řídící struktury a operátory
Syntaxe řídících struktur je stejná jako ve všech Cčkových jazycích. if (podmínka) příkaz; [ else příkaz; ] while (podmínka) příkaz; do příkaz; while(podmínka); for(inicializace; podmínka; inkrementace) příkaz; foreach(pole as prvek) příkaz; foreach(pole as klíč => prvek) příkaz; switch(výraz) { kód s návěstími "case:" }
Stejně tak syntaxe výrazů (až na následující výjimky):
verze 1.0
ke zřetězení se používá operátor "." operátor identity === (a neidentity !==)
© 2008, Martin Kruliš
22
Funkce
Funkce se deklarují klíčovým slovem function. Následuje identifikátor, parametry a tělo funkce.
Nikde se neuvádí datové typy (ani u parametrů, ani návratová hodnota). Uvnitř funkce lze použít příkaz return, který ukončí provádění funkce a případně předá návratovou hodnotu. Proměnné definované uvnitř funkce jsou lokální. Globální proměnné musíme nejprve deklarovat (příkazem global $var).
function mul_int($a, $b) { if (!is_int($a) || !is_int($b)) return false; return $a * $b; } verze 1.0
© 2008, Martin Kruliš
23
Práce s řetězci
Programátor PHP potřebuje pracovat s řetězci téměř neustále.
Za tímto účelem je zde připravena celá řada funkcí, které mají tuto práci co nejvíce usnadnit.
Kromě standardních funkcí, které naleznete v jiných jazycích, nabízí PHP práci s regulárními výrazy.
Regulární výrazy jsou vzory, které nějakým způsobem popisují řetězce. Dají se použít k vyhledávání, nahrazování, … PHP implementuje regulární výrazy standardu POSIX Extended.
verze 1.0
Tzn. stejné jako na unixových systémech.
© 2008, Martin Kruliš
24
Práce se soubory
Se soubory se pracuje analogicky jako v jazyce C.
PHP obsahuje navíc speciální funkce, které usnadňují práci především s textovými soubory:
Soubor se otevře v určitém módu a programátor dostane handle. Všechny funkce pro manipulaci se souborem pak pracují s tímto handle.
readfile() – načte soubor a pošle jej na výstup Příklad 2 file_get_contents() – načte soubor do řetězce file() – načte soubor do pole (řádky odpovídají prvkům)
Dále jsou v PHP vestavěny funkce pro práci s filesystémem.
verze 1.0
Funkce jsou přebrány z unixového API. © 2008, Martin Kruliš
25
Práce s databází v PHP
Práce s databází je založena na architektuře klient-server.
Klient MySQL pro PHP je implementován v zásuvném modulu (rozšíření) PHP php_mysql.
Komunikace probíhá po síťovém spojení.
Tento modul musí být povolen a nakonfigurován v php.ini. Existuje ještě „improved“ varianta php_mysqli, což je vylepšená verze MySQL rozhraní pro PHP.
PHP obsahuje celou řadu dalších klientů pro jiné databáze.
verze 1.0
PostrgeSQL, MSSQL, Oracle, …
© 2008, Martin Kruliš
26
MySQL – základy práce
Nejprve je třeba otevřít spojení: $id = mysql_connect(server, user, passwd, ...);
Dále si vybereme databázi: mysql_select_db(dbname, [id]);
Nyní můžeme posílat SQL dotazy: $res = mysql_query(sql_query, [id]);
Na závěr práce je slušností spojení ukončit: mysql_close([id]);
verze 1.0
© 2008, Martin Kruliš
27
MySQL – zpracování výsledků dotazu
Výsledek z mysql_query(), závisí na typu SQL dotazu:
Upravující dotaz (INSERT, UPDATE, DELETE, …) vrací jako výsledek boolean – zda se povedl, či nikoli. Zjišťující dotaz (SELECT) vrací speciální resource. Následující funkce umí vrátit vždy jeden (následující) řádek výsledku: mysql_fetch_row($res) – vrací řádek jako indexované pole !
mysql_fetch_assoc($res) – vrací řádek jako asociativní pole, kde klíče jsou názvy sloupců mysql_fetch_object($res) – vrací řádek jako objekt
$result = mysql_query('SELECT sl1, sl2, ... '); while( ($row = mysql_fetch_assoc($res)) ) { echo($row['sl1'], $row['sl2'], ...); Příklad 3 } verze 1.0
© 2008, Martin Kruliš
28
Co ještě PHP umí
Pokročilejší práce s texty.
Práce s obrázky.
Generování, úpravy, …
Síťové funkce.
Překlady, překódování znakových sad, …
Sockety (TCP a UDP), HTTP, FTP, SMTP, POP3, IMAP, …
Práce s XML Komprese (práce se soubory ZIP, GZIP, BZIP, …). A spousty dalších.
verze 1.0
© 2008, Martin Kruliš
29
Další informace
www.php.net
Instalační balíčky, dokumentace (i v češtině), fóra, …
www.zend.com, framework.zend.com
Společnost stojící za vývojem jádra PHP a také např. Zend frameworku.
php.vrana.cz
www.jakpsatweb.cz
verze 1.0
© 2008, Martin Kruliš
30