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 Internet Internet Nalezne požadovaný soubor klient webový server <html> <head> <title> Stránka </title> 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. Obsah je získán jako výstup CGI aplikace. Definuje pouze způsob spouštění aplikací a předávání dat. CGI rozhraní je nezávislé na implementaci serveru. Je to standard W3C. CGI aplikací může být cokoliv. Kompilovaná aplikace napsaná v libovolném jazyce (C, C++, ). Interpretovaná aplikace (tzv. skript) PHP, Perl, Python, Ruby verze 1.0 2008, Martin Kruliš 3
Common Gateway Interface Server spustí CGI aplikaci a předá ji HTTP požadavek Hypertext Transfer Protocol CGI aplikace Internet Internet CGI aplikace vygeneruje obsah stránky klient webový server <html> <head> <title> Stránka </title> Stránka se předá serveru a ten ji pošle klientovi jako odpověď. verze 1.0 2008, Martin Kruliš 4
Interpretované CGI skripty Server se podívá do svého datového úložiště Nalezený soubor se skriptem předá interpretu 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. <html> <head> <title> Stránka </title> Interpret zpracuje skript a vygeneruje stránku verze 1.0 2008, Martin Kruliš 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: Java, ASP (.NET), Perl, Python, Ruby (on Rails), verze 1.0 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 <?php a?>. 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. <html> <head> <title>php příklad</title> </head> <body> <p> <?php echo 'Text z PHP.';?> </p> </body> </html> <html> <head> <title>php příklad</title> </head> <body> <p> Text z PHP. </p> </body> </html> verze 1.0 2008, Martin Kruliš 8
Podmiňování a iterace HTML kódu <html> <head> <title>ukázka PHP</title> </head> <html> <head> <title>ukázka PHP</title> </head> <body> <?php if (ma_nadpis()) {?> <h1>podmíněný nadpis</h1> <? }?> <? for ($i=1; $i<4; $i++) {?> <div><? echo $i;?></div> <? }?> </body> </html> <body> <h1>podmíněný nadpis</h1> <div>1</div> <div>2</div> <div>3</div> </body> </html> 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?>). Tzn. HTML se vloží správně, PHP musí být uzavřeno do <?php?>. verze 1.0 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. Datový typ je určen obsahem proměnné a může se měnit. Existují čtyři základní datové typy: 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; $b = 3.14; $c = true; $d = 'řetězec'; verze 1.0 2008, Martin Kruliš 12
Další datové typy Dále existují dva složené datové typy: array jednorozměrné pole object A ještě dva speciální datové typy 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: 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). verze 1.0 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í. Tzn. pokud je potřeba změnit typ proměnné, PHP ji automaticky změní podle daných pravidel Pravidla jsou celkem složitá. Zde je pár zajímavých: 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á. Nespecifikuje se jejich velikost a prvky lze libovolně přidávat a odebírat. Hodnoty prvků v poli nemají pevně daný datový typ. 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. Oba typy indexů lze kombinovat. Pole se chová spíše jako slovník než jako pole z jiných programovacích jazyků. verze 1.0 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. přidávání, odebírání prvků vyhledávání třídění slévání a podobné úpravy verze 1.0 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í. Především umístí všechna data z HTTP do přehledných struktur. Potřebná data jsou uložena v následujících polích $_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). Příklad 1 verze 1.0 2008, Martin Kruliš 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): ke zřetězení se používá operátor "." operátor identity === (a neidentity!==) verze 1.0 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. Tzn. stejné jako na unixových systémech. verze 1.0 2008, Martin Kruliš 24
Práce se soubory Se soubory se pracuje analogicky jako v jazyce C. 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. PHP obsahuje navíc speciální funkce, které usnadňují práci především s textovými soubory: readfile() načte soubor a pošle jej na výstup file_get_contents() načte soubor do řetězce file() načte soubor do pole (řádky odpovídají prvkům) Příklad 2 Dále jsou v PHP vestavěny funkce pro práci s filesystémem. Funkce jsou přebrány z unixového API. verze 1.0 2008, Martin Kruliš 25
Práce s databází v PHP Práce s databází je založena na architektuře klient-server. Komunikace probíhá po síťovém spojení. Klient MySQL pro PHP je implementován v zásuvném modulu (rozšíření) PHP php_mysql. 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. PostrgeSQL, MSSQL, Oracle, verze 1.0 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. Překlady, překódování znakových sad, Práce s obrázky. Generování, úpravy, Síťové funkce. 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