01 - Zaklady PHP - KSI

33 downloads 2116 Views 239KB Size Report
Základy PHP. Úvod do jazyka PHP a principů skriptování na straně serveru ... (C, C++, …). ▫. Interpretovaná aplikace (tzv. skript) – PHP, Perl, Python, Ruby …
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



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