PHP Jemný úvod do PHP Mgr. Ján Guniš, KUI, 2003 KUI Košice, 15. 5. 2003
História PHP 1994 Rasmus Lerdorf, počítadlo prístupov na stránky v Perl-e, neskôr prepis do C rozšírenie pod názvom Personal Home Page Tools pridanie SQL príkazov, práca s formulármi - Professional Home Page/Form Interpreter 2.0 PHP 3.0 beží aj pod WIN32 a Macintosh PHP 4 (PHP hypertextový preprocesor), cca. 10x rýchlejší ako PHP 3.0 aktuálna verzia PHP 4.3.? KUI Košice, 15. 5. 2003
PHP a ostatné jazyky jazyky na strane servera CGI (Common Gateway interface) SSI (Server Side Includes) SSJS (Server Side JavaScript) ASP (Active Server Page) PHP jazyky na strane klienta Dynamické HTML JavaScript JavaApplet KUI Košice, 15. 5. 2003
O PHP ... voľne šíriteľný softvér download: http://www.php.net (Win32, UNIX, Macintosh) spúšťanie ako CGI skriptu zakompilovanie do jadra Apacha php je interpreter „infovekácke“ servre podporujú PHP manuál k PHP na adrese http://www.php.net/docs.php alebo na serveri rayman KUI Košice, 15. 5. 2003
Čo PHP vie? spracovanie dát z formulárov práca s cookies a http hlavičkami dynamicky generovať stránky podpora databáz (MySQL, MS SQL .., ODBC) práca s poštou čítanie a ukladanie dát na serveri syntax PHP je úspornejšia ako syntax ASP (tvrdia niektorí :-) .... KUI Košice, 15. 5. 2003
Inštalácia na WIN32 inštalácia sieťovej karty (protokol TCP/IP) inštalácia http servera Apache a PHP spojenie Apacha a PHP v php3.ini (php3.ini-dist) doplniť cestu k interpretru PHP extension_dir=c:\php a prekopírovať do c:\windows do srm.conf (apache) dopísať ScriptAlias /php3/ "C:/php/" AddType application/x-httpd-php3 .php3 .php .phtml Action application/x-httpd-php3 "/php3/php.exe" do httpd.conf" (apache) dopísať DocumentRoot "c:/moj web" DirectoryIndex index.htm naštartovať server a http://localhost/ KUI Košice, 15. 5. 2003
Čo potrebujeme? dobrá znalosť jazyka HTML textový editor (poznámkový blok, ..) http server (najlepšie Apache) s podporou PHP, alebo aspoň PHP ? základy nejakého skriptovacieho jazyka na strane klienta ? špecializovaný editor (PHPEd, ..) ? databázový server (MySQL, ..) KUI Košice, 15. 5. 2003
Bezpečnosť I (LINUX) PHP skripty bežia pod užívateľom pod akým beží Apache Apache: napr. užívateľ: wdata, skupina: wdata PHP skript: užívateľ: xyz, skupina: users práva PHP skriptov: - r w - - - - r - - práva súborov do ktorých PHP zapisuje: ak ich vytvorí užívateľ xyz: xyz, users, - r w - - - - r w - ak ich vytvorí PHP skript: wdata, wdata, - r w - - - - - - - práva priečinkov v ktorých sú skripty vytvorené xyz: d r w x - - - - - x (ak skript zapisuje: d r w x - - - - w x) vytvorené skriptom: d - - x - - - - - - (ak skript zapisuje: d - w x - - - - - -) KUI Košice, 15. 5. 2003
Bezpečnosť II (LINUX) povoľte len to, čo je minimálne nutné chráňte zdrojové súbory pred nepovolanými osobami skripty a súbory s citlivými dátami ukladajte s reg. príponou PHP prístupové mená a heslá v súboroch šifrujte safe_mode = on PHP kontroluje, či vlastník běžiaceho skriptu je vlastníkom souboru, s ktorým sa má manipulovať safe_mode_exec_dir = adresar umožňuje spúšťať systémové programy len z tohto priečinka open_basedir = adresar (open_basedir = .) všetky operácie so súbormi budú obmedzené na tento adresár disable_functions funkcia1, funkcia2, .. funkcie uvedené v tejto direktíve budú zakázané KUI Košice, 15. 5. 2003
Začíname prípona súboru php, php3, phtml (podľa srm.conf) vloženie skriptu 1: ale preferuje sa skôr html kód html kód <? php skript ?> <?php php skript ?> html kód html kód vloženie skriptu 2: html kód <script language=”php”> php skript </script> html kód komentár1: // kometár v riadku komentár2: /* komentár cez viac riadkov */ citlivosť na veľké a malé písmená len v názvoch premenných KUI Košice, 15. 5. 2003
Premenné I premenná: $meno (meno začína písmenom alebo _) netreba deklarovať (ak nie je „vývojarský“ mód) premenná sa automaticky konvertuje na potrebný typ integer: <-2 147 483 948, +2 147 483 647> 123, 0X2E (hex 0X), 033 (okta 0) double: od -1.7e308 do 1.7e308, najmenšie kladné: 3,4e-234 knižnica BC, väčšia presnosť string, zápis do úvodzoviek alebo apostrofov "retazec" escape sekvencia: \\ zpätná lomka, \n nový riadok, \r návrat vozíka, \t tabulátor, \" úvodzovky, \$ znak dolar array: $a=array(1,2,3); $x=array(array(1,2), $a[3]=4; array(3,4)); echo $x[1][0]; {3} objekt boolean: true, false (od verzie PHP4) KUI Košice, 15. 5. 2003
Premenné II a konštanty Práca s typom premennej: zistenie typu premennej: funkcie: GetType Is_Integer, Is_Double, Is_String, Is_Array, Is_Object, Is_Bool zmena typu premennej: SetType(premenna, "typ") Konštanty define (“meno_konštanty“, hodnota); meno za nezačína $ konštanta môže byť typu: integer, double, string, boolean je globálna (na rozdiel od premenných) KUI Košice, 15. 5. 2003
Premenné III, polia reset (pole) – nastav ukazovateľ na začiatok poľa current(pole) – hodnota aktuálneho prvku poľa next(pole) – posuň na ďalší prvok poľa end(pole) – posunie ukazovateľ na koniec poľa a vráti hodnotu key(pole) – vráti index aktuálneho prvku poľa count(pole) – vráti počet prvkov poľa Prechod poľom 1: for ($i=0; $i<count($x); $i++): echo $x[$i]; endfor; Prechod poľom 2: reset($x); while (current($x)): echo ”index: ” . key($x) . ” ”; echo ”hodnota: ” . current($x) . ”<br>”; next($x); endwhile; KUI Košice, 15. 5. 2003
Operátory matematické: + - * / %(zvyšok po delení) += -= *= /= %= ++$x --$x, $x++, $x-- (preinkrement, predekrement, postinkrement, postdekrement) bitové: & (logický súčin), | (logický súčet), ^ (nonekvivalencia), ~ (negácia) logické: $x je rovné 0, tak je false, inak je true == (je rovné), != (je rôzne), >, <, >=, <=, and, or, xor reťazcové: . (zreťazenie), .= (pripojenie) podmienený: vyraz1 ? vyraz2 : vyraz3 $x>$y ? $max=$x : $max=$y; KUI Košice, 15. 5. 2003
Vetvenie I: if if (podmienka) prikaz; if (podmienka): prikaz1; prikaz2; .. endif; if (podmienka): prikaz1; .. else: prikaz2; .. endif if (podmienka1): prikaz1; .. elseif (podmienka2): prikaz2; .. elseif (podmienka3): prikaz3; .. else: prikaz4; ... endif; KUI Košice, 15. 5. 2003
Vetvenie II: switch switch (vyraz): case hodnota1: prikaz1; .. break; default: prikaz3; ... endswitch; vyraz sa vyhodnotí potom sa testuje zhoda z hodnotou za case v prípade zhody sa vykoná všetko až do break, alebo do konca príkazu switch KUI Košice, 15. 5. 2003
Cyklus I: for for (vyraz1; vyraz2; vyraz3): prikaz1; prikaz2; .. endfor; Pr.: for ($i=1; $i<=10; $i++): echo $i . “<br>”; endfor; vyraz1 sa vyhodnotí na začiatku cyklu potom sa vyhodnotí vyraz2 a ak je výsledok true, vykoná sa telo cyklu na konci každého prechodu cyklom sa vyhodnotí vyraz3 pokiaľ je hodnota vyraz2 true, cyklus sa opakuje KUI Košice, 15. 5. 2003
Cyklus II: while while (podmienka): prikaz1; prikaz2; .. endwhile; while ($i <= 10): echo $i . “<br>”; $i++; endwhile; KUI Košice, 15. 5. 2003
Cyklus III: do-while do { prikaz1; prikaz2; .. } while (podmienka); echo $i . “<br>”; $i++; } while ($i <= 10); KUI Košice, 15. 5. 2003
Príkazy break a continue break (n) umožňuje okamžité ukončenie tela cyklu a vynorenie sa z n vnorených štruktúr continue (n) preskočí všetky príkazy v zostávajúcich častiach tiel n vnorených cyklov a začne vykonávať ďalšiu iteráciu KUI Košice, 15. 5. 2003
Príkazy require a include require ("subor") načítanie skriptu zo súboru ak je použitý v tele cyklu, skript sa načíta len pri prvom volaní include ("subor") načítanie skriptu zo súboru ak je použitý v tele cyklu, skript sa načíta príslušný počet krát KUI Košice, 15. 5. 2003
Funkcie I function meno (parameter1, paramater2, ..) { príkazová časť; return hodnota; } Pr. 1: Pr. 2: function pozdrav () function maximum ($x, $y) { { echo "Dobry den"; return $x>$y ? $x : $y; } } .. .. pozdrav(); echo maximum ($a, $b); KUI Košice, 15. 5. 2003
Funkcie II Lokálne a globálne premenné vo funkciách nie sú automaticky prístupné globálne premenné Pr. 1: Pr. 2: function zmen() function zmen() { { $a = 10; global $a; } $a = 10; .. } .. .. $a = 20; .. zmen(); $a = 20; echo $a; // výstup je 20 zmen(); echo $a; // výstup je 10 KUI Košice, 15. 5. 2003
Funkcie III parametre volané odkazom a hodnotou function zmen (&$a, $b) { $a=10; $b=10; } .. $x=20; $y=20; zmen($x,$y); echo $x . " " . $y; //výstup je 10 20 KUI Košice, 15. 5. 2003
Funkcie IV štandardné hodnoty parametrov function umocni($zaklad, $exponent=2) .. umocni($x); //to isté, ako umocni($x,2) umocni($x,3); statické premenné function citac() { static $pocet=0; $pocet++; return $pocet; } .. echo citac(); // výstup je 1 echo citac(); // výstup je 2 KUI Košice, 15. 5. 2003
Funkcie V Rekurzia Pr.: function faktorial($n) { return $n==0 ? 1 : $n * fak($n-1); } echo (faktorial(5)); // výsledok je 120 je možná aj nepriama rekurzia KUI Košice, 15. 5. 2003
Formuláre I <form action=”obslužný skript” method=POST(GET)> definícia formulára <form> GET – dáta su pripojené za URL POST – dáta v tele http požiadavky Dáta z formulárov sú automaticky prístupne v rovnomenných premenných <form action=”obsluha.php” method=POST> <intup type=”text” name=”meno”> <input type=”submit” value=”Odošli”> </form> .. {obsluha.php} echo $meno; KUI Košice, 15. 5. 2003
Formuláre II Užitočné môžu byť skryté polia polia formulárov. Slúžia na uchovávanie stavových informácií. <input type=”hidden” name=”info” value=”odoslal”> {obsluha.php} if ($info == ”odoslal”): .. //spracuj dáta s formulára else: .. //zobraz formulár endif; Znovuzobrazenie neúplne vyplneného formulára (položky, ktoré boli vyplnené netreba vyplňovať ešte raz) <intup type=”text” name=”meno” value=”<? echo $meno; ?>”> Spracovanie dát z formulárov z neznámou štruktúrou umožňujú asociatívne polia: $HTTP_GET_VARS $HTTP_POST_VARS KUI Košice, 15. 5. 2003
Príklady I phpinfo funkcia phpinfo vracia komplexné informácie o inštalácii PHP a o niektorých nastaveniach servera heslo prístup na stránku len po autorizácii užívateľa, možnosť ako vytvárať stránky pre skupiny ľudí (v praxi sa používa autorizácia aj na úrovni http servera) kniha_nav jednoduchá kniha návštev pre návštevníkov www stránok, jednotlivé príspevky sú zapisované do textového súboru KUI Košice, 15. 5. 2003
Príklady II pocitadlo jednoduché počítadlo návštevnosti www stránky, celková, denná a priemerná denná návštevnosť mazanie mazanie položiek v textovom súbore cez HTML formulár, v podstate to ide aj cez priame editovanie súboru v textovom editore (telnet na server), ale toto je pohodlnejšie, i keď nie vždy použiteľné mail_to odoslanie obsahu formulára www stránky formou emailu na zadanú adresu bez použitia klientského programu pre správu pošty (napr. Outlook Express), pre správnu funkčnosť skriptu je potrebné, zdrojový text uložiť v kódovaní ISO-8859-2 KUI Košice, 15. 5. 2003
Príklady III anketa kompletná aplikácia - anketa na www stránku jednoduchá práca s cookies log súbory, informácie o návštevníkovi a ešte niečo navyše download všetky skripty KUI Košice, 15. 5. 2003
PHP a informatika SŠ - DOBRÁ znalosť HTML neexistuje žiaden debugger => ťažké ladenie programov je dobré, ak študenti už majú nejaký základ z programovania, napr.: Turbo Pascal => nie pre začiatočníkov skript v PHP generuje zápis HTML kódu => vyššia náročnosť nepoužiteľné pri 2 hodinovej dotácii informatiky + nová perspektívna technológia zaujímavá aj pre študentov možnosť prezentovať svoje programy na i-nete atraktívnejšie programy ako napr. v TP žiaci sa veľa naučia (sieť, sieťové OS, protokoly, bezpečnosť, databázy, ..) práca len s legálnym softvérom (LINUX, Apache, PHP, MySQL, text. editor) použiteľné pri zameraní gymnázium 7902 5 05 – INFORMATIKA univerzálnosť HTML kódu => multiplatformové aplikácie KUI Košice, 15. 5. 2003
Zdroje na i-nete www.php.net (www.php.cz, www.php.sk) domovská stránka PHP www.apache.org domovská stránka http servera Apache www.builder.cz diskusia a články o PHP www.nusphere.com PHPEd, editor umožňujúci písať a spúšťať (s php.exe) PHP skripty, verzia 1.75 je free www.gjar-po.sk/studium/informatika/php Algoritmy s PHP, materiál pre študentov KUI Košice, 15. 5. 2003