Návrh a tvorba WWW stránek 1/38 PHP PHP Hypertext Preprocessor interpret stránek na serveru běží na serveru příkazy PHP nejprve provede a vloží do XHTML dokumentu, následně posílá klientovi příkazy PHP lze vkládat přímo do XHTML
Návrh a tvorba WWW stránek 2/38 Server x klient Výhody: spolupráce se serverovými aplikacemi (databáze, SMTP, FTP) nenáročnost na HW a SW klienta výstupem je čisté (X)HTML menší objem přenesených dat přenáší se pouze výsledek skriptů ochrana zdrojových kódů Nevýhody: zátěž serveru nemožnost interakce s objekty na stránce (reakce na klávesy, myš)
Návrh a tvorba WWW stránek 3/38 Co je potřeba? 1) možnost publikování na webovém serveru s podporou PHP 2) totéž pro ladění skriptů na domácím PC Oba servery musí mít nainstalovány tyto součásti: HTTP server Apache, IIS, interpret PHP vhodné je pracovat s databází, nejčastěji MySQL Tyto programy musí být nainstalovány a nakonfigurovány pro vzájemnou spolupráci
Návrh a tvorba WWW stránek 4/38 Možnosti instalace 1) jednotlivé součásti stáhnout samostatně a ručně nakonfigurovat 2) instalace balíčku, který obsahuje všechny potřebné součásti (Apache, PHP, MySQL) ad 1) přehled v nastavení aktuální verze součástí možnost kombinace součástí ad 2) jednoduchá instalace snadná konfigurace Xampp, Wampp2, PhpTriad, PhpEasy, PhpHomeEdition
Návrh a tvorba WWW stránek 5/38 Nejsnažší domácí instalace balíčky Xampp, PhpEasy, obsahuje osvědčenou kombinaci Apache, MySQL, PHP součásti jsou vzájemně nakonfigurovány alternativou mohou být aplikace Wammp2, která obsahuje stejné součásti, navíc není nutné ji instalovat
Návrh a tvorba WWW stránek 6/38 Alternativní instalace instalace jednotlivých součástí samostatně + jejich konfigurace většinou v případě jiné kombinace na "ostrém" serveru alternativy k Apachi Microsoft IIS, Personal Web Server alternativy k MySQL PostgreSQL, Access, Oracle
Návrh a tvorba WWW stránek 7/38 start/restart serveru Práce se serverem Apache na adrese http://localhost (http://127.0.0.1) se potom nachází kořenový adresář webového serveru všechny php skripty musí být uloženy v kořenovém adresáři implicitně je kořenovým adresářem /htdocs Konfigurace Apache konfigurační soubor httpd.conf v adresáři Apache/conf úpravy se provádí přidávání a odebíráním komentářů vybraných direktiv např. změna kořenového adresáře, složka instalace, výchozí soubor DocumentRoot "C:/skripty" ServerRoot "C:/Apache"
Návrh a tvorba WWW stránek 8/38 Vyhodnocování PHP ke skriptům je potřeba přistupovat přes webový server skripty NELZE spouštět přímo z lokálního disku Konfigurace PHP v souboru php.ini (Apache/php, Windows/System32, ap.) formou komentářů, především přidávání knihoven register_globals on (jednodušší), off (bezpečnější) práce s formulářovými proměnnými
Návrh a tvorba WWW stránek 9/38 Vkládání PHP do (X)HTML PHP lze vkládat přímo do XHTML, pro interpret je potřeba obě části oddělit... kód XHTML...... kód XHTML... <?php /* začátek PHP */ <?... kód PHP...... kód PHP...?> /* konec PHP */?>... kód XHTML...... kód XHTML... zkrácená verze není kompatibilní s XML použití zkrácené verze lze zakázat v php.ini (short_open_tag = On) třetí možnost <script type="text/php" language="php">
Návrh a tvorba WWW stránek 10/38 Kombinace XHTML a PHP PHP generuje kód XHTML kód PHP lze vložit na libovolné místo v dokumentu kód PHP lze kdykoli ukončit a přejít na XHTML (a naopak) <body> <?php echo "Vítejte na stránce";?> <h2>první dokument v PHP</h2> <? echo "<p><i>lze použít i značky XHTML</i></p>";?> </body> funkce echo vypisuje zadaný text na standardní výstup dokument obsahující PHP musí mít příponu.php (php5, phtml, konfigurace Apache) dokument musí být zobrazen přes webový server, ne z disku zobrazte si zdrojový kód
Návrh a tvorba WWW stránek 11/38 Základní syntaxe příkazy jsou odděleny středníkem oddělovačem jsou "bílé znaky" - přehlednost kódu strukturovaný jazyk - příkazy jsou členěny do bloků { příkazy } <? function fce() { if (podminka) { příkaz1; příkaz2; } }?> formátování příkazů - přehlednost
Návrh a tvorba WWW stránek 12/38 Komentáře víceřádkový komentář /* toto je komentář */ jednořádkový komentář // komentář do konce řádku # jednořádkový komentář komentáře lze vnořovat, je potřeba ale použít různých druhů <?... /* první komentář /* pokus o vnořený komentář */ text vnějšího komentáře - CHYBA, komentář již skončil */?>
Návrh a tvorba WWW stránek 13/38 Proměnné v PHP jsou proměnné uvozeny znakem $, tj. $a je "proměnná a" identifikátor proměnné musí začínat písmenem nebo podtržítkem, dále "cokoli" - raději bez diakritiky proměnné není třeba deklarovat či inicializovat <??> $a = 100; $b = $a; $c = $a + $b; není třeba se starat o datové typy - automatická konverze <? $a = 10; $a = 3.14159; $a = "text";?>
Návrh a tvorba WWW stránek 14/38 Pole k jednotlivým položkám pole se přistupuje přes indexy <? $a[0]=11; $a[1]=5; $a[2]=3; $a[3]=8;?> s proměnnou typu pole lze pracovat jako s celkem <? $b = $a;?> přístup k proměnným <? echo $a[3];?> // vypíše se 8 naplnění pole - každá položka zvlášť vícerozměrná pole - najednou <? $x = Array(1.14,2.56,7.90);?> <? $tabulka[1][1] = 5;$tabulka[1][2] = 8; $tabulka[2][1] = 3;$tabulka[2][2] = 1;?>
Návrh a tvorba WWW stránek 14,5/38 <? $dny["mon"]="pondělí"; $dny["tue"]="úterý"; $dny["wed"]="středa"; $dny["thu"]="čtvrtek"; $dny["fri"]="pátek"; $dny["sat"]="sobota"; $dny["sun"]="neděle"; Asociativní pole?> echo $dny[date("d")]." ".Date("j").". ".Date("n").". ".Date("Y");
Návrh a tvorba WWW stránek 15/38 Řetězce uvádějí se v uvozovkách (nebo apostrofech) <? $retezec = "Toto je retezec";?> výpis řetězce <? echo $retezec?> // vypise se Toto je retezec escape sekvence - zápis speciálních znaků -!! pouze v řetězcích v uvozovkách \n ukončení řádku \t tabulátor <? $zvire = "kočka"; echo "Chované zvíře je $zvire"; // kočka echo "\$zvire je $zvire"; // $zvire je kočka! echo $zvire je $zvire ; // $zvire je $zvire
Návrh a tvorba WWW stránek 16/38 konkatenace řetězců Řetězce $a = "10"; $b = 15; $c = $a + $b; // $c bude 25 (automaticka konverze) $d = $a. $b; // $d bude 1015
Návrh a tvorba WWW stránek 17/38 Matematické operátory + - * / - sčítání, odčítání, násobení, reálné dělení % - modulo složené operátory +=, -= atd. <? $a+=5;?> Unární operátory pro inkrementaci a dekrementaci jeden z nejčastěji používaných příkazů, proto speciální operátory <? $a = $a+1; $a++;?> <? $a = $a-1; $a--;?> lze použít dvě varianty zápisu - $a++ a ++$a <? $a = 10;?> $b = $a++; // $a je 11, $b je 10 $c = ++$a; // $a je 12, $c je 12 $c = --$a; // $a je 11, $c je 11 $b = $a--; // $a je 10, $b je 11
Návrh a tvorba WWW stránek 18/38 Operátory porovnávání většinou v podmínkách a cyklech, výsledkem je true/false == operátor rovnosti!=, <> operátor nerovnosti <, >, <=, >= porovnání velikosti === proměnné mají stejnou hodnotu i typ!== proměnné mají různou hodnotu nebo typ <? $a = 7; $b = 7.00; $c = $a==$b; // true, mají stejnou hodnotu $c = $a===$b // false, různý typ?>
Návrh a tvorba WWW stránek 19/38 logické AND (&&) logické OR ( ) Konjunkce a disjunkce <? $podm = (($b>0) AND ($b<10)); // ($b>0) && ($b<10) $podm = (($b<0) OR ($b>10)); // ($b<0) ($b>10)?> rozdíl v prioritě operátorů - AND má nižší prioritu než && zkrácené vyhodnocování logických výrazů zleva doprava operátor XOR - exklusivní disjunkce - právě jedna <? $a xor $b?> // právě jedna proměnná je pravdivá podmíněný operátor podmínka? výraz1 : výraz2
Návrh a tvorba WWW stránek 20/38 Funkce za identifikátorem funkce vždy následují závorky výjimkou je funkce (konstrukt) echo - lze použít se závorkami i bez <? echo "Text"; // ekvivalentní zápis echo ("Text");?> funkce může a nemusí vracet výsledek, pokud výsledek vrací, přiřadí se do proměnné <? $a = abs(-10);?> mimo standardních funkci PHP lze deklarovat funkce vlastní použitím klíčového slova function function Jmeno (seznam_parametru) { příkazy; [return hodnota;] } // pokud funkce vrací hodnotu
Návrh a tvorba WWW stránek 21/38 příklad jednoduché funkce <? function Uvitani() { echo "<h2>vítejte</h2>"; }?> uvnitř funkce lze volat další funkce, např. standardní funkci Date <? function Uvitani() { echo "Vítejte<br />"; echo "Dnes je ".date("j.n.y G").":".date("i"); }?> proměnné deklarované uvnitř funkce jsou lokální, předávání hodnot odkazem zajistí & <? function Nastav(&$x,$y) { $x=0;$y=1; } $a=100;$b=200;nastav($a,$b);echo $a,$b ; // vytiskne 0,200?>
Návrh a tvorba WWW stránek 22/38 Řízení běhu programu k řízení programu slouží mimo jednoduchých příkazů a volání funkcí především podmíněný příkaz a příkazy cyklu Podmíněný příkaz if jednoduchá podmínka <? if (podmínka) { blok příkazů }?> úplná podmínka <? if (podmínka) { blok příkazů } else { blok příkazů }?> rozšíření elseif <? if (podmínka1) { blok příkazů } elseif (podmínka2) { blok příkazů } else { blok příkazů }?> v případě vícenásobného použití elseif je vhodné využít switch Pozor na operátor porovnání v podmínce (==)!
Návrh a tvorba WWW stránek 23/38 Rozcestník switch slouží k rozlišení více stavů podmínky <? switch ($mesic) { /* podminka musi byt v () */ case 2: $dny=28;break; case 4: case 6: case 9: case 11: $dny=30;break; default: $dny=31; }?> prochází všechny větve => je potřeba v každé větvi break;
Návrh a tvorba WWW stránek 24/38 provádí zadaný počet opakování Cyklus for <? for ($i=1;$i<=6;$i++) echo "<h$i>nadpis $i. úrovně</h$i>";?> problém s nekonečným cyklem na serveru je v PHP vyřešen nastavením max. doby provádění cyklu, např. na 30 s Cyklus foreach pro pole <? $x = Array(1,2,3,4,5,6,7,8,9,10);?> foreach ($x as $y) echo "$y "; // výpis prvků break příkaz pro ukončení cyklu continue ukončení aktuálního průchodu cyklem exit ukončení zpracovávání skriptu
Návrh a tvorba WWW stránek 25/38 Cyklus while v případě, že není předem znám počet průchodů, ale je známa podmínka ukončení cyklu libovolný cyklus for lze převést na while <? $i = 1; while ($i<=10) { }?> echo $i; $i++; Cyklus do-while cyklus s podmínkou na konci, provede se vždy alespoň jednou <? $i=1; do { echo $i;$i++; } while ($i <= 10);?>
Návrh a tvorba WWW stránek 26/38 Vkládání souborů vkládání externích souborů do skriptů záhlaví, zápatí, příp. často používané části kódu Require a include zadaný soubor vloží do dokumentu v místě uvedení příkazu syntaxe: require "soubor.php"; // include "soubor.php" require ("soubor.php"); // include ("soubor.php") pokud zadaný soubor existuje, je vložen do dokumentu pokud zadaný soubor neexistuje require skončí s fatální chybou include skončí s varováním (@) před vložením souboru je opuštěn režim zpracování PHP
Návrh a tvorba WWW stránek 27/38 Require a include - použití <? include "zahlavi.php"; zahlavi.php echo "Toto je obsah stránky"; include "zapati.php";?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>xhtml</title> <meta http-equiv="content-type" content="text/html; charset=windows-1250" /> </head><body> zapati.php <p> autor <? echo date("j."."m."."y, ". "H:i:s");?> </p></body></html>
Návrh a tvorba WWW stránek 28/38 Readfile otevře zadaný soubor a jeho obsah vypíše na standardní výstup obsah souboru neprochází přes interpret PHP, tzn. že může obsahovat značky XHTML, které interpretuje klient, ale nemůže obsahovat příkazy PHP <? readfile ("soubor.txt");?>
Návrh a tvorba WWW stránek 29/38 Zpracování formulářů jedno z nejčastějších využití PHP jednoduchá spolupráce s formuláři v XHTML obslužný skript je nastaven v atributu action značky <form> <form name="f1" method="post" action="obsluha.php"> při zpracování formulářových polí jsou tato přístupná v proměnných stejného jména jako ve formuláři bezpečnost register_globals předávání proměnných <? echo $jmeno; // funguje pro register_globals=on echo $_POST["jmeno"]; // pro register_globals=off echo $_GET["jmeno"]; // ---- ---- echo $_REQUEST["heslo"]; // univerzální?> často se využívá v kombinaci s funkcí mail()
Návrh a tvorba WWW stránek 30/38 Předávání proměnných automaticky ve stejnojmenných proměnných lépe přes asociativní pole $_POST, $_GET viz příklad obsluha.php často se využívá možnost zpracování formuláře ve stejném souboru - snadné úpravy - všechno na jednom místě poprvé je potřeba zobrazit formulář, po odeslání už ne viz příklad fotky
Návrh a tvorba WWW stránek 31/38 Nahrávání souborů na server pomocí formulářového pole typu file podmínky pro formulář: - kvůli bezpečnosti musí být použita metoda POST - atribut enctype="multipart/form-data"; soubor je uložen do dočasného adresáře (nastaveno v php.ini) odkud je potřeba jej zkopírovat do cílové složky při zpracování je k dispozici jméno souboru, velikost a typ (v proměnných $_FILES[ file ][ size name tmp_name type ]) v PHP jsou nastaveny bezpečnostní hodnoty pro velikost souboru viz příklad fotky
Návrh a tvorba WWW stránek 32/38 Práce se soubory skript nesmí mít přístup ke všem souborům na serveru záleží na právech procesu webového serveru soubory, ke kterým má přistupovat skript, musí mít patřičná práva přístupová práva, bezpečnost, DocumentRoot práce s celými soubory kopírování, mazání, změna práv atd. práce s obsahem souborů čtení a zápis dat do souboru
Návrh a tvorba WWW stránek 33/38 Manipulace s celými soubory file_exists() boolovská funkce, zda soubor existuje <? if (!file_exists("jokes.php")) echo "Chyba! Soubor neexistuje!";?> is_dir() totéž pro adresáře is_executable() true pokud je soubor sppustitelný is_file() zda se jedná o soubor (případně is_link odkaz) is_readable() true pokud je možné ze souboru číst (is_writable) is_uploaded_file() true pokud jméno odpovídá souboru nahranému na server metodou POST copy($soubor, "cesta kam"), Rename(), Unlink()
Návrh a tvorba WWW stránek 34/38 Manipulace s obsahem souborů - otevření čtení z zápis do souboru na libovolném místě fopen() pro úpravy je soubor potřeba nejprve otevřít <? $fp1 = fopen($jmeno,režim);?> absolutní i relativní cesta, i mimo webserver (pro čtení) režim přístup k souboru r čtení (pokud neexistuje, chyba) r+ čtení i zápis (např. zápis od začátku souboru) w zápis (existuje => obsah smazán, jinak vytvořen) w+ zápis a současné čtení (existuje => smazán) a zápis na konec souboru (neexistuje => vytvoří se) a+ zápis na konec souboru + čtení
Návrh a tvorba WWW stránek 35/38 Manipulace s obsahem souborů - čtení třetím parametrem fopen() může být boolovská hodnota, která určuje, zda se má soubor hledat nejen v aktuálním adresáři, ale i v adresáři daném proměnnou include_path v konfiguračním souboru fopen vrací ukazatel na soubor, je dobré jej uložit pro další použití čtení ze souboru fread(), fgets(), fgetc() fread() čte po blocích <? $chunk = fread($fp1,1024); > fgets() čte po řádcích z textového souboru (omezení řádku) <? $radek = fgets($fp22,4096);?> fgetc() načte znak automaticky je přesouván ukazatel pozice v souboru, pomocí funkce feof() lze testovat konec souboru
Návrh a tvorba WWW stránek 36/38 Manipulace s obsahem souborů - čtení Příklad: Vyhledejte v zadaném souboru řádky obsahující daný text. <? $soubor = "soubor.txt"; $grep = "php"; if ($fp=fopen($soubor,"r")) while (!feof($fp)) { $radek = fgets($fp,filesize($soubor)); if (strpos($radek,$grep)!==false) echo $radek."<br />"; };?>
Návrh a tvorba WWW stránek 37/38 Manipulace s obsahem souborů - zápis fwrite() zapíše do souboruřetězec na pozici ukazatele <? fwrite(soubor,řetězec[,délka])?> soubor musí být otevřen pro zápis lze použít funkci fputs(), která má ale stejný význam (alias) funkce pro manipulaci s ukazatelem: - rewind() nastaví ukazatel na začátek souboru - ftell() vrací aktuální pozici ukazatele v souboru - fseek() nastaví ukazatel na zadanou hodnotu Všechny tyto funkce očekávají jako první parametr odkaz na soubor, fseek() navíc očekává druhý parametr s určením pozice.
Návrh a tvorba WWW stránek 38/38 Manipulace s obsahem souborů - zápis <? $fp = fopen("soubor.dat","r"); fseek($fp,filesize("soubor.dat")); $pozice = ftell($fp); rewind($fp); fseek($fp,$pozice);?> Uzavření souboru vhodné u souborů, do kterých bylo zapisováno dojde k vyprázdnění vyrovnávací paměti a uložení změn v souboru <? fclose($fp);?>