Dynamika na straně serveru doc. Ing. Miloslav Hub, Ph.D. Pardubice, listopad 2012 Tento studijní materiál byl vytvořen s podporou projektu FRVŠ 375/2012 s názvem "Inovace studijního předmětu Tvorba WWW stránek".
Jak to celé funguje? 1. 2. 3.
Klient odešle požadavek Server požadavek zpracuje Server odešle klientovi odpověď
1. 2. 3.
A co konkurence?
ASP Microsoft .NET Java servlety, JSP CGI
Proč PHP?
Možnost, jak zajistit dynamiku na straně serveru.
Některá data je potřeba před odesláním klientovi předzpracovat.
PHP je jedena z nejrozšířenějších technologií pro zajištění dynamiky na straně serveru.
PHP podléhá „The PHP License“ za kterou se však nemusí platit.
PHP lze použít s nejčastěji používanou kombinací Linux+Apache+MySQL.
PHP lze použít všude a to i v případě IIS fy. Microsoft.
PHP nemusí být použito jenom pro programování na straně serveru, ale i pro programování CLI a GUI desktop aplikací.
Pozn. PHP znamená Personal Hypertext Preprocessor
Co potřebujeme k PHP? Pro tvorbu PHP stránek: -
postačí Poznámkový blok, existují však i kvalitnější editory (PsPad, Dreamweaver, …)
Pro provoz PHP stránek: -
webový server, který podporuje PHP (obsahuje PHP interpreter)
-
pokud chceme pracovat s databází, pak i databázový server
-
instalační balíky EasyPHP, PHPHome
A hlavně? -
nebát se učit novým věcem a experimentovat
Jak pozná server, že se jedná o PHP? 1. 2.
Soubory s PHP kódem mají příponu *.php Kód PHP je v souboru oddělen od HTML kódu pomocí: PHP kód ?> <SCRIPT LANGUAGE="php"> PHP kód <% PHP kód %>
První PHP skript Soubor pozdrav.php
http://server.cz/pozdrav.php
Základy syntaxe
Citlivost PHP na velikosti písmen
Názvy proměnných jsou citlivé na velikost písma. $promenna ≠ $PROMENNA ≠ $PrOmEnNa
Názvy funkcí nejsou citlivé na velikost písma. Echo ≈ ECHO ≈ echo ≈ ECHo ≈ EchO Prikaz() ≈ pRiKaz() ≈ PRIKAZ()
Konvence:
Názvy proměnných velkým písmem, slova oddělovat podtržítkem (např. $MOJE_KONSTANTA).
Názvy proměnných prvním malým. První písmeno každého dalšího slova velké (např. $mojePromenna).
Názvy funkcí prvním malým. První písmeno každého dalšího slova velké (např. mojeFunkce()).
Proměnné
V PHP není třeba proměnné deklarovat předem.
U názvu proměnných záleží na velikosti písmen.
V okamžiku přiřazení do proměnné se automaticky určí její typ (integer, double, string, array, object, boolean).
Názvu proměnné předchází znak „$“.
Platný název proměnné začíná písmenem nebo podtržítkem, následovaným libovolným počtem písmen, číslic nebo podtržítkem.
?>
$4site = "Pokus 1";
// neplatné, způsobí chybu
$_4site = "Pokus 1";
// platné
Typy proměnných
Booleanovské proměnné (boolean)
Celočíselné proměnné (integer)
Proměnné s plovoucí desetinnou čárkou (float)
Řetězce (string)
Pole (array)
Objekty (object)
Zdroje (source)
Speciální datový typ NULL (NULL)
Předdefinované proměnné (1)
Některé proměnné vytváří PHP samo (např. systémové, data z formulářů,…).
Individuální vstupní a serverové proměnné se implicitně neumisťují do globálního kontextu, namísto toho jsou v následujících superglobálních polích.
$GLOBALS
odkaz na každou proměnnou, která je momentálně dostupná v globálním kontextu. Klíči tohoto asociativního pole jsou názvy globálních proměnných
$_SERVER
proměnné nastavené WWW serverem nebo jinak přímo spjaté s prováděcím prostředím aktuálního skriptu
$_GET
proměnné poskytované skriptu přes HTTP GET
Předdefinované proměnné (2) $_POST
proměnné poskytované skriptu přes HTTP POST
$_COOKES
proměnné poskytované skriptu přes HTTP cookies.
$_FILES
proměnné poskytované skriptu přes HTTP POST uploady souborů.
$_ENV
proměnné poskytované skriptu z prostředí
$_REQUEST
proměnné poskytované skriptu přes libovolný vstupní mechanismus a kterým proto nelze důvěřovat. Lze zakázat pomocí konfigurační direktivy
$_SESSION
proměnné, které jsou momentálně registrovány v aktuální relaci skriptu
Předdefinované proměnné (3) $PATH_INFO
Cesta ke skriptu, který má být zpracován.
$REMOTE_ADDR IP adresa, ze které přišel požadavek. $REMOTE_HOST Doménová adresa počítače, ze kterého přišel požadavek $SCRIPT_NAME
Jméno právě prováděného skriptu.
Proměnné a formuláře (1) formular.htm
Vyplníme formulář
program.php
Zobrazí se vyplněné hodnoty
Proměnné a formuláře (2) Soubor formular.htm
Proměnné a formuláře (3) Soubor program.php
Jméno uživatele je: Příjmení uživatele je:
Operátory
Aritmetické operátory
Operátory přiřazení
Bitové operátory
Operátory porovnání
Operátory řízení chyb
Prováděcí operátory
Inkrementační/dekrementační operátory
Logické operátory
Řetězcové operátory
Kombinování PHP a HTML $b): echo "a je větší než b"; else: echo "a je rovno b"; endif; ?>
a je menší než b $b):?> a je větší než b a je rovno b
Ladění skriptů a ošetření chyb
V každém programu je nejméně jedna chyba
Chyby v programu lze rozdělit na chyby:
syntaktické chyby
sémantické chyby
logické chyby
chyby na straně serveru
chyby v programovacím jazyku
Syntaktické chyby
Typické pro začínající programátory.
Např. zkomolené názvy proměnných, nebo funkcí, opomenuté středníky mezi příkazy, textové řetězce neuzavřené v uvozovkách.
PHP je interpretovaný jazyk, není tedy kompilátoru, který by syntaktické chyby odhalil při překladu.
PHP odhalí syntaktické chyby až při samotném vykonávání skriptu.
Pokud PHP narazí na syntaktickou chybu, vypíše chybové hlášení a ukončí běh skriptu.
Pokud PHP ohlásí, že je na nějakém řádku chyba, chyba může být klidně na některém z předchozích řádků.
Možnost jak syntaktickou chybu odhalit je umazat kus programu a otestovat, zda bude fungovat správně.
Sémantické chyby
Narušení sémantiky programu
Např. volání neexistující funkce, volání funkce se špatnými parametry
Chyby nejsou odhaleny při parsování kódu, např. až v okamžiku volání funkce Warning: Wrong parameter count for explode() in D:\Pokus\source.php on line 3
Logické chyby
Typické pro velmi dlouhé a složité programy.
Případy, kdy skript nefunguje, jak je od něho očekáváno.
PHP tuto chybu nedokáže samo odhalit.
Častou chybou je použití if($a=1) místo správného if($a==1).
Způsob, jak tento druh chyb odhalit je postupně pomocí příkazu echo vypisovat aktuální hodnoty proměnných.
Chyby na straně serveru
Takové chyby, kdy server nefunguje, jak by měl.
Např. nepodaří se otevřít soubor, připojit k databázi,…
Vždy je dobré eventuální výskyt této chyby předem ošetřit (např. pomocí if, výpisu vlastní chybové hlášky a automatického odeslání mailu správci).
Pokud nechceme, aby nebylo nějakou funkcí generováno chybové hlášení, zapíšeme před její volání zavináč @. např. $soubor = @FOpen("soubor.txt", "r");
Pokud jeden příkaz volá více funkcí, vypisování chybových zpráv potlačíme uvedením zavináče @ na začátku příkazu např. @$text=FGet($soubor1,512).FGet($soubor2,512);
Příkazy k načítání externích skriptů (1)
Příkazy require, include, require_once, include_once slouží k načítání externích skriptů.
Načítaný skript se vloží v místě použití příkazu. Provedou se všechny jeho příkazy a poté se v provádění pokračuje dalšími příkazy.
Příkaz require a require_once v případě neexistence skriptu vyvolávají Fatal Error. Příkaz include a include _once pouze Warning.
Příkaz require a include můžeme volat několikrát (např. uvnitř cyklu), příkazy require_once a include_once načtou externí skript pouze jednou.
Bezstavovost HTTP a PHP (1)
Protokol HTTP je sám o sobě bezstavový – jednotlivé operace klientů jsou obslouženy jako zcela nezávislé autonomní operace.
Při rozsáhlejších aplikací musíme tuto bezstavovost překonat – např. v případě el. obchodu si aplikace musí pamatovat, co má zákazník ve virtuálním nákupním košíku (musí si pamatovat proměnné).
Bezstavovost HTTP a PHP (2) Jak to obejít?
Uživatele rozpoznávat podle IP a hodnoty proměnných ukládat na server.
Každému uživateli přiřadit ID a poté, co se autentizuje, hodnoty proměnných ukládat na server.
Hodnoty proměnných předávat v URL adrese.
Použít skryté pole ve formuláři.
Použití cookies.
Použití session proměnných.
Předávání proměnných v URL Vzor: http://www.server.cz/program.php?promenna1=hodnota1& promenna2=hodnota2
v hodnotách proměnných jsou mezery nahrazeny znakem ‘+’
znaky ‘.’, ’-’ a ’_’ jsou nahrazeny znakem procenta ‘%’ následovanými šestnáctkovými číslicemi vyjadřujícími kód znaku.
Soubor prvni.htm
Pokračujte zde Soubor druhy.php
// Miloslav Hub ?>
Předávání proměnných pomocí formuláře Soubor prvni.htm
Soubor druhy.php
Cookies (1)
Malé soubory, které může WWW stránka uložit na lokální disk klienta
Cookies jak klient, tak i server zasílají v hlavičce
Pokud je stejná stránka volána později, odešlou se jí data uložená v příslušných cookies.
Bezpečné: omezená velikost cookies, max. počet pro jeden server,….
Použití: např. pro zjištění, pokolikáté klient server navštívil
Klient může mít podporu cookies vypnutou
Cookies (2)
Uložení cookies: SetCookie("jmeno", "Jan Novák"); SetCookie("jmeno", "Jan Novák", Time()+3600); Protože je cookies součástí hlavičky musí být tento příkaz použit dříve, než je generovaný vlastní kód HTML !!!
Čtení cookies: echo $_COOKIES["jmeno"];
Všechny cookies, které na server dorazí, jsou uloženy v superglobálním poli $_COOKIES.
Session proměnné (1)
Podporovány až od PHP 4.0
Podpora session proměnných musí být povolena v konfiguračním souboru php.ini
Jedná se o mechanismus, který uživatelům přiděluje jednoznačné identifikátory.
Vybrané proměnné jako označeny jako session proměnné.
Session proměnné se přitom ukládají do sdílené paměti nebo do souborů na serveru.
Skript, který bude pracovat s session proměnnými, musí mít na začátku příkaz session_start();
Chceme-li nějakou proměnnou definovat jako session proměnnou, použijeme příkaz session_register("nazev_promenne");
Session proměnné (2) Soubor prvni.php
Pokračujte zde
Soubor druhy.php
MySQL
MySQL je nejpoužívanější databázový server (ve spolupráci s PHP).
Velmi rychlý, multi-threadový, více uživatelský, jednoduchý a přitom robustní SQL server.
Šířený pod GNU General Public Licence (použití zdarma)nebo možnost zakoupit si komerční licenci (podpora).
Naprogramován v C a C++.
Funguje pod mnoha platformami (nejpoužívanější Linux).
Podporuje transakční i ne-transkační zpracování.
Dodržuje (téměř) normu SQL-92.
Často využívané webové rozhraní: phpMyAdmin (opensource).
Existují i rozhraní typu desktop aplikace.
Ukončení běhu skiptu "; Exit(); endif; ?>