PHP Jaroslav SKÁLA poznámky k přípravě na reparát
OBSAH / PHP 1. PHP JAKO CELEK... 2 2. SKRIPT V PHP... 2 3. DALŠÍ RYSY KÓDU... 2 4. ZÁKLADNÍ PŘÍKAZY... 2 5. PROMĚNNÉ... 2 6. DATOVÉ TYPY... 2 7. ZÁKLADNÍ OPERACE S PROMĚNNÝMI... 2 8. ZJEDNODUŠENÉ ZÁPISY + ZÁKLADNÍ MATEMATICKÉ OPERÁTORY... 2 9. PŘÍKAZY PRO VĚTVENÍ PROGRAMU... 3 10. PŘÍKAZY CYKLU... 4 11. FUNKCE... 5 12. TABULKA VŠECH DOSTUPNÝCH FUNKCÍ... 6 13. ŘETĚZCE... 7 14. PRÁCE S DATEM A ČASEM... 8 15. UŽIVATELSKÉ FUNKCE... 8 16. POLE..9 17. FORMULÁŘE... 10 18. PRVKY FORMULÁŘE... 11 19. OVĚŘENÍ SPRÁVNOSTI ZADANÝCH HODNOT... 12 20. KVALITNÍ ZPRACOVÁNÍ FORMULÁŘOVÝCH DAT... 14 21. PRÁCE SE SOUBORY... 14 22. ČTENÍ A ZÁPIS DO TEXTOVÝCH SOUBORŮ... 15 23. COOKIES... 16 24. NAHRÁVÁNÍ SOUBORŮ NA WEB... 16 25. SPRÁVA SESSIONS... 17 26. POUŽITÁ LITERATURA.18 1
1. PHP JAKO CELEK - skriptovací jazyk určený především pro tvorbu internetových aplikací - PHP = [personal home page tools] 2. SKRIPT V PHP - textový soubor s příponou, která mívá povětšinou tvar *.php, *.php3, *.php4 nebo *.phtml - pro označení PHP kódu se používá kombinace znaků: 3. DALŠÍ RYSY KÓDU [!] všechny příkazy PHP musí být zakončeny středníkem - správný kód by měl být taktéž průběžně komentovaný komentáře vkládáme vždy za část hotové skriptu pomocí znaků // nebo # 4. ZÁKLADNÍ PŘÍKAZY - zobrazení údaje v prohlížeči (výpis na obrazovku): echo // syntaxe: echo ahoj světe ; 5. PROMĚNNÉ - jedná se o místo v paměti počítače, které odkazuje na pojmenovanou hodnotu - každá proměnná musí začínat znakem $ // syntaxe: $mojecislo = 6; - typy proměnných: string (řetězec); integer (celé číslo); float, real & double (desetinné číslo); boolean (logická proměnná, hodnota PRAVDA, NEPRAVDA (1, 0), zapisuje se TRUE nebo FALSE) 6. DATOVÉ TYPY - celá čísla [INTEGER] = používá se pro celá čísla, která mají rozsah v intervalu od 2 147 483 648 až do + 2 147 483 648 - desetinná čísla [DOUBLE] = používá se pro desetinná čísla - pole [ARRAY] = používá se pro vícerozměrné proměnné - řetězec [STRING] = používá se pro řetězec znaků, a je tedy určen především pro texty 7. ZÁKLADNÍ OPERACE S PROMĚNNÝMI - spojování řetězců = mechanismus vyhodnocující kód nejprve převádí hodnoty po obou stranách tečky (tzv. operandy) na řetězce a poté je sloučí // syntaxe: echo Dnes je.. pondělí ; - zřetězení do nové proměnné = můžeme sdružovat několik řetězců do nové proměnné - zřetězení do stále stejné proměnné = umožňuje za pomocí jedné proměnné stále rozšiřovat řetězec 8. ZJEDNODUŠENÉ ZÁPISY + ZÁKLADNÍ MATEMATICKÉ OPERÁTORY STANDARTNÍ ZÁPIS ZJEDNODUŠENÝ ZÁPIS $x = $x. ahoj ; $x.= ahoj ; $x = $x + 1; $x += 1; $x = $x - 1; $x -= 1; $x = $x * 10; $x *= 10; $x = $x / 2; $x /= 2; OPERACE ZNAK Sčítání + Odčítání - násobení * Dělení / dělení se zbytkem % přičtení jedničky ++ odečtení jedničky -- 2
9. PŘÍKAZY PRO VĚTVENÍ PROGRAMU - jedná se o příkazy, které porovnávají hodnoty proměnných a podle výsledku porovnávání zvolí jednu ze dvou nebo více možností, jak dále pokračovat ve vykonávání kódu - podmínky pomocí příkazu IF = používáme, pokud potřebujeme otestovat, zda proměnná obsahuje nějakou určitou hodnotu, nebo zda je naopak od této hodnoty odlišná // syntaxe: if ($hodin == 12) echo Je poledne! ; - ELSEIF = vícenásobné rozhodování o pokračování vykonávání kódu, je možné použít v jednom příkazu IF vícekrát - podmíněný operátor: výraz? kladná_odpoveď : záporná_odpoveď [!] jedno rovnítko (=) slouží k přiřazení hodnoty, oproti tomu dvě rovnítka (==) slouží jako operátor provádějící porovnání - výběr z více možností příkazem SWITCH: systém nejprve vyhodnotí testovaný výraz a poté prochází jednotlivé větve příkazu a ignoruje veškeré příkazy, dokud nenarazí na shodu hodnoty testovaného výrazu a hodnoty dané větve pokud k takové shodě nedojde, bude spuštěna sekce default PŘÍKLAD: switch (testovaný vyraz / proměnná) } case hodnotaa: // příkazy, které se mají provést v případě splnění rovnosti hodnotya a hodnoty testovaného výrazu break; case hodnotab: // příkazy, které se mají provést v případě splnění rovnosti hodnotyb a hodnoty testovaného výrazu break; default: // příkazy, které se mají provést, pokud nevyhověla ani jedna podmínka } PŘEHLED OPERÁTORŮ OPRÁTOR ZÁPIS V PHP VYSVĚTLENÍ AND A && B podmínka A i podmínka B musí obě platit najednou OR A B musí platit aspoň jedna z podmínek A, nebo B 3
10. PŘÍKAZY CYKLU - cyklus (či smyčka) představuje sekvenci příkazů, kterou program vykonává opakovaně - cyklus s podmínkou na začátku WHILE = nejméně náročný cyklus, avšak zároveň nabízí nejnižší komfort PŘÍKLAD <? php while (výraz) { php kód } - ze zápisu plyne, že tento typ cyklu je založen na testování platnosti určité podmínky - cyklus s podmínkou na konci DO WHILE = cyklus, který testuje podmínku až na jejím samém konci, čímž je dána vlastnost, že se příkazy uvnitř cyklu provádí alespoň jednou PŘÍKLAD <? php do { php kód } while (výraz) - cyklus pro stanovený počet průběhů FOR = nejflexibilnější, ale zároveň nejnáročnější cyklus PŘÍKLAD <? php for (výraz1; výraz2; výraz3) { php kód } - význam výrazů v závorce za for je následující: výraz1 počáteční inicializace řídící proměnné (počítadla) cyklu výraz2 logická podmínka, která musí být splněna, aby se cyklus povedl výraz3 výraz pro aktualizaci řídící proměnné (počítadla) cyklu - zvýšení hodnoty počítadla o jednotku: $řídící_proměnná ++; 4
11. FUNKCE - jakýsi program, který nám vrátí určitá data MOŽNÉ ZPŮSOBY FORMÁTOVÁNÍ %b parametr bude zpracován jako integer a zobrazen ve dvojkové soustavě %c parametr bude zpracován jako integer a zobrazen jako písmeno na základě kódu ASCII %d parametr bude zpracován jako integer a zobrazen jako celé číslo v desítkové soustavě %u parametr bude zpracován jako integer a zobrazen jako celé číslo v desítkové soustavě bez znaménka mínus %f parametr bude zpracován jako integer a zobrazen jako double, čili včetně desetinných míst %o parametr bude zpracován jako integer a zobrazen v osmičkové soustavě %s parametr bude zpracován jako integer a zobrazen jako klasický řetězec %x parametr bude zpracován jako integer a zobrazen v šestnáctkové soustavě %X totéž jako formát %x s tím rozdílem, že písmena budou převedena na velká - parametr určující formát nemá pouze svůj typ, ale také další strukturu, kterou lze charakterizovat takto: % čím_vyplnit jak_zarovnat délka počet_desetinných_míst formát PŘÍKLADY printf( %f, 1,123456); 1,123456 printf( %d, 1,123456); 1 printf( %d %f, 1,123456, 1,123456); 1 1,123456 printf( %d, 1,123456ABC ); 123456 printf( %.2f, 1,123456); 1,23 printf( %010.2f, 1,123456); 0000000001,23 printf( %0-10.2f, 1,123456); 1,23000000000 printf( Výsledek je: %0-10.2f, 1,123456); Výsledek je: 1,23000000000 printf( Výsledek je: % x-10.2f, 1,123456); Výsledek je: 1,23xxxxxxxxx - lokální proměnné jsou všechny proměnné, které definujeme uvnitř těla nějaké funkce - jestliže je daná proměnná definována mimo definici jakékoli funkce, jedná se o tzv. globální proměnnou, která je oproti proměnným lokálních viditelná od místa její definice až na konec definičního souboru 5
12. TABULKA VŠECH DOSTUPNÝCH FUNKCÍ printf sprintf strtoupper strtolower ucfirst strlen strstr strpos strrpos strrev str_repeat substr substr_count str_replace strtr highlight_string, highlight_file strtok time rand srand microtime PŘEHLED FUNKCÍ zobrazí výsledek přímo na obrazovce předává výsledek funkce pro další zpracování převádí všechny znaky řetězce na velká písmena převádí všechny znaky řetězce na malá písmena převádí první písmeno z řetězce na velké písmeno zjišťuje délku řetězce získání části z řetězce definovanou pozicí prvního výskytu zadaného znaku a koncem řetězce zjišťuje pozice, na níž se nachází v textu první výskyt znaku zjišťuje pozice, na níž se nachází v textu poslední výskyt znaku umožňuje psát pozpátku slouží pro opakování řetězce umožňuje výběr podřetězce zjišťuje celkový počet výskytu znaků nahrazuje určité znaky v řetězci znaky jinými slouží k přeložení vstupního řetězce dle zadání zvýrazňuje kód aby byl co nejlépe čitelný slouží k postupnému získávání částí zadaného řetězce definovaný oddělovači funkce, jež vrací čas ve speciálním unixovém formátu, kdy je návratovou hodnotou počet sekund, které uplynuly od půlnoci 1. 1. 1970 generuje náhodné číslo v určeném intervalu slouží k inicializaci generátoru náhodných čísel umožňuje řetězec obsahující dva jedinečné parametry msec a sec, kdy sec je počet vteřin uplynulý od data 1. 1. 1970 a msec je mikrosekundová část předchozí hodnoty 6
13. ŘETĚZCE - řetězce (neboli string) to je všechno, co souvisí s textem. Pomocí některých funkcí můžete text ořezávat, počítat znaky, vypisovat kód ASCII atd., jedná se o kus textu length copy pos insert delete str ZÁKLADNÍ PŘEHLED ŘETĚZCŮ funkce zjišťuje aktuální velikost řetězce, což provede přetypováním nultého znaku na číslo funkce vybere z řetězce část od stanovené pozice funkce vrátí číslo, které odpovídá pozici řetězce, kde se vyskytuje zadaný podřetězec procedura, která vloží vkládaný řatězec do druhého řetězce na pozici Kam, výsledná hodnota je uložena v proměnné Retezec, je-li v parametru Kam hodnota větší, než je aktuální délka řetězce, vloží se VkladanyRetezec za Retezec procedura, která od pozice Odkud odstraní část řetězce o délce KolikZnaku, výsledná hodnota je uložena v proměnné Retezec procedura, která převede výraz libovolného číselného datového typu na řetězcovou reprezentaci, stejný proces převodu provádí procedura write a writeln METODY PHP PRO PRÁCI S ŘETĚZCI addslashes() přidá do řetězce zpětná lomítka před znaky typu("). chop() odstraní mezery na konci řetězce chr(ascii) zapíše řetězec podle ASCII chunk_split(řetězec, délka, oddělovač) rozdělí řetězec na několik částí o dané délce a oddělí je oddělovačem(implicitně mezera) explode(oddělovač, řetězec) rozdělí řetězec na několik částí podle oddělovače a vytvoří z nich pole crypt(řetězec, základ) podle dvojpísmeného základu zakóduje řetězec htmlspecialchars(řetězec) převede zvláštní znaky řetězce na entity HTML htmlentities(řetězec) stejné využití jako htmlspecialchars(), ale jinak interpretuje české znaky join(oddělovač, pole) vytvoří z pole řetězec a jednotlivé prvky oddělí oddělovačem implode(pole, oddělovač) vytvoří z pole řetězec a prvky oddělí oddělovačem ltrim(řetězec) odstraní prázdné znaky na začátku řetězce ord(řetězec) zapíše řetězec v ASCII kódu parse_str(řetězec) rozdělí řetězec dotazu na proměnné a jejich hodnoty echo(řetězec), print(řetězec) vypíše řetězec rawurlencode(řetězec) zakóduje text jako URL rawurldecode(řetězec) dekóduje zakodovaný text URL similar_text(řetězec1, řetězec2) spočítá, kolik písmen mají stejné části řetězců str_replace(hledaná část, nahradí hledanou část náhradou náhrada, řetězec) strip_tags(řetězec) odstraní z řetězce tagy HTML a PHP(to je výhodné v knize návštěv) stripslashes(řetězec) Odstraní zpětná lomítka '\' strlen(řetězec) vypočítá délku řetězce strrev(řetězec) obrátí řetězec trim(řetězec) odstraní z řetězce prázdné znaky(mezery, tabulátory) 7
14. PRÁCE S DATEM A ČASEM PŘEVEDENÍ DATA A ČASU DO PŘIROZENÉHO TVARU a vrací am nebo pm, podle toho, zda je odpoledne či dopoledne A obdoba a s tím, že výsledek vrací ve velkých písmenech g aktuální hodina bez počáteční nuly, 1 až 12 G aktuální hodina bez počáteční nuly, ale v rozšířeném tvaru - 0 až 23 h aktuální hodina s počáteční nulou, 1 až 12 H aktuální hodina s počáteční nulou a v rozšířeném tvaru - 0 až 23 i minuty ve tvaru 00 až 59 d vrací aktuální číslo dne, tzn. 01 31 j číslo dne v měsíci, bez počáteční nuly 1 až 31 l den v týdnu textově, například Friday D vrací den v týdnu symbolizovaný třípísmennou zkratkou, například Tue = Tuesday w den v týdnu numericky 0 až 6 F měsíc v textové podobě, například January m číslo měsíce, 01 až 12 M název měsíce v třípísmenné zkratce, například Jan n číslo měsíce bez počáteční nuly s počet sekund, 00 až 59 t počet dní v měsíci, 28 až 31 Y rok, prezentovaný čtyřmi číslicemi, 1999 y dvoumístný rok, 99 z pořadí dne v roce, 0 až 365 15. UŽIVATELSKÉ FUNKCE - funkce se používají především pro opakující se části kódu PŘÍKLAD <? php function jméno_funkce (parametry) { příkazy_funkce; return návratová_hodnota; } - funkce může také mít i více parametrů a v takovém případě se pouze oddělí čárkou - funkce je dobré vkládat vždy na začátek skriptu 8
16. POLE - zjednodušeně můžeme pojem pole označit za tabulkovou proměnnou - jednotlivá čísla řádků a sloupců této pomyslné tabulky se nazývají indexy pole - pole mohou být: jednorozměrná = proměnná obsahuje několik řádků a jediný sloupec s hodnotami či opačně dvourozměrná = více řádků i sloupců vícerozměrná = což již nemá v našem prostoru příměr - všechny indexy jsou číslovány od nuly - pro naplnění pole existují dva postupy: a) pomocí názvu proměnné a indexu $moje_pole[0] = leden ; $moje_pole[1] = únor ; $moje_pole[1] = březen ; b) pomocí funkce array $moje_pole = array( leden, únor, březen ); - pro vyvolání hodnoty proměnné stačí uvést její jméno s patřičným indexem: echo $moje_pole[0]; //zobrazí leden reset end current next prev key list each array_walk sort, rsort asort, arsort in_array ZÁKLADNÍ FUNKCE PRO PRÁCI S POLEM přemístění pomyslného interního ukazatele pole na jeho začátek přemístění interního ukazatele na konec proměnné typu pole přečte hodnotu pole odpovídající aktuálnímu indexu dle pozice ukazatele přesouvá ukazatel na pozici odpovídající následujícímu indexu pole a čte jeho hodnotu před čtením aktuálního indexu proměnné typu pole je ukazatel přemístěn na předchozí index tuto funkci používáme v případě, pokud si nejsme jistí pozicí ukazatele nebo ji konkrétně nepotřebujeme umožňuje přiřadit hodnoty pole do definovaných proměnných lze využít nejen pro práci s uživatelskou proměnnou typu pole, ale také například pro načtení a zpracování datových kolekcí POST, GET, SESSION, nebo COOKIE používáme, pokud chceme, aby se každý prvek našeho pole stal parametrem pro funkci, resp. Aby se funkce provedla pro každý prvek pole seřazuje hodnoty, ale nejsou zachovávány indexy jednotlivých prvků seřazuje hodnoty a zachovává indexy jednotlivých prvků Metoda pro vyhledávání hodnoty v obsažené v poli 9
17. FORMULÁŘE - základní struktura formuláře by měla vypadat následovně: PŘÍKLAD <form action= xxx method= xxx onsubmit= xxx > položky formuláře odesílající tlačítko </form> - parametr ACTION = hodnota parametru určuje, kam se mají data z formuláře předat // syntaxe: action= mailto:skala.jaroslav@email.cz - parametr METHOD = určuje, jakou metodou mají být formulářová data odeslána zpracovávacímu skriptu, existují dvě metody POST ukládá data do speciální kolekce $ _POST GET rovněž ukládá data do své speciální kolekce $ _GET, ale data jsou přenášena pomocí adresní řádky prohlížeče a jsou tudíž na očích uživateli a je možné je zaznamenat v různých log souborech - parametr ONSUBMIT = nejedná se vlastně ani o parametr, ale spíše o událost, která nastane po odeslání formuláře tlačítkem typu SUBMIT 10
18. PRVKY FORMULÁŘE - prvky formuláře se rozumí textové pole, seznam hodnot, zaškrtávací políčka, přepínače a další - TEXT = prvek formuláře používaným pro vstup řetězových nebo také numerických hodnot <input type= text name= název_položky value= počáteční_hodnota_položky size= délka_zobrazení_položky maxlength= maximální_délka_vyplněné_hodnoty > - vlastnosti: type daný typ formulářové položky, jeho hodnota je text name název formulářové položky value hodnota formulářové položky, není povinná, jedná se o předběžné vyplnění položky určitou hodnotou, která je ihned zobrazena size šířka položky při zobrazení maxlength maximální počet znaků, který je možné do položky vyplnit - SEZNAM = prvek známý též jako listbox je seznamem definovaných hodnot, z nichž je třeba vybrat minimálně jednu <select name= název_položky > <option value=hodnota_volby>název volby</option> <option value=hodnota_volby>název volby</option> <option value=hodnota_volby>název volby</option> </select> - ZAŠKRTÁVACÍ POLÍČKO = prvek známý též jako check box je předurčen pro výběr jedné nebo více hodnot z definovaného seznamu <input type= checkbox name= název_položky value=hodnota_položky checked> - PŘEPÍNACÍ TLAČÍTKA = tlačítky typu radio buttons jsou obdobou zaškrtávacích políček s tím rozdílem, že je možné vybrat pouze jedinou z nabízených hodnot <input type= radio name= název_položky value=hodnota_položky checked> - TEXTOVÉ POLE = slouží pro zadávání rozsáhlejšího textu a právě z tohoto důvodu je navrženo tak, že na rozdíl od prvku TEXT lze definovat nejenom přípustný počet sloupců ale také řádků <textarea name= název_položky rows=počet_řádků cols=počet_sloupců>předvyplněná_hodnota</textarea> 11
- TLAČÍTKA = aby formuláře mohly být plně interaktivní, jsou zapotřebí také funkční tlačítka, výbava jazyka HTML nabízí taková tlačítka hned tři: SUBMIT = tlačítko, které způsobí odesílání vyplněných dat na server BUTTON = obyčejné tlačítko, které nedělá nic, dokud neošetříme jeho stisknutí metodou onclick v JavaScriptu RESET = speciální tlačítko, které vymaže všechna data z formuláře <input type= typ_tlačítka name= název_tlačítka value= text_na_tlačítku onclick= odkaz_na_javascriptovou_funkci > 19. OVĚŘENÍ SPRÁVNOSTI ZADANÝCH HODNOT - kontroly odeslaných dat se dají provádět dvěma způsoby, avšak každé z nich nese nějaké riziko: používání kontroly pouze před odesláním dat z formuláře vystavujeme se riziku, že uživatel bude mít v nastavení bezpečnosti svého prohlížeče vypnutou podporu JavaScriptu a tím pádem se žádná kontrola neprovede používání kontroly dat pouze na straně serveru ve své podstatě se jedná o bezesporu funkční možnost, ovšem pro každého uživatele bude časem jistě nepříjemné, že při jakékoli drobné chybě se bude znovu a znovu načítat webová stránka, což je podmínkou pro odesílání dat na server - KONTROLA PŘED ODESLÁNÍM FORMULÁŘE = abychom mohli zavolat kontrolní proceduru, musíme nejprve vytvořit javascriptovou funkci, která bude vracet logický výraz a tuto funkci volat při události formuláře OnSubmit: <script language="javascript"> <--! function checkform() { var retval retval = true if (document.all["název_testované_položky"].value == "testovaná hodnota") { alert("něco je špatně!"); document.all["název_testované_položky"].focus(); retval = false; } return retval; } --> </script> 12
PŘEHLED HLÁŠENÍ PRO KONTROLU PŘED ODESLÁNÍM FORMULÁŘE FUNKCE VLASTNOSTI alert confirm prompt window.alert( Něco je špatně! ); var jonebone = window.confirm( Nebyl vyplněn požadovaný parametr! Chcete pokračovat? ); var jmeno = window.prompt( Zdravím, Jak se jmenuješ? ); zobrazení informativního hlášení slouží k tomu, aby uživatel vzal na vědomí nějakou informaci zobrazení výzvy k potvrzení používáme v případě, pokud vyžadujeme nějakou interakci zobrazení výzvy k zadání údajů použijeme v případě, zda-li jsou zapotřebí zadat nějaké doplňující údaje - KONTROLA A ZPRACOVÁNÍ HODNOT NA SERVERU = kontrola, která nastává v okamžiku odeslání dat ke zpracování na server if ($jmeno == "" $prijmeni == ""): die("<font color='red'><b>chyba: nevyplnili jste vsechny polozky formulare</b></font>"); else: echo "Zpracovani formulare probehlo v poradku..."; endif; - DIE zastavuje další vykonávání skriptu zobrazením textové informace, která je parametrem funkce - pokud je odhalena chyba ve formuláři, je dobré nabídnout místo znovu prázdného formuláře korekturu, která jde vytvořit dvěma způsoby: JavaScript [funkce back]: <a href= formular.php onclick= javascript:window.history.back(); >Zpět na formulář</a> Inicializace formulářové proměnné: <input type= text name= testtext size= 20 value= <?= $testtext > - v praxi bývá lepší odlišit zdroj dat, respektive metodu, která bývá pro odeslání dat použita, data z formuláře můžeme dostat rovněž dvěma způsoby a to metodou POST a GET: $testtext = $_GET[ testtext ]; $testtext = $_GET[ testtextarea ]; echo $testtext<p>$testarea ; nebo $testtext = $_POST[ testtext ]; $testtext = $_POST[ testtextarea ]; echo $testtext<p>$testarea ; 13
20. KVALITNÍ ZPRACOVÁNÍ FORMULÁŘOVÝCH DAT - ochrana před nebezpečnými znaky = při programování je nutné mít se na pozoru speciálně před znaky, jako jsou uvozovky či apostrofy, avšak bohatě postačí, abychom si zapamatovali, že každý příkaz SQL, respektive jeho řetězové parametry, by měly být nejprve prověřeny skrze funkci addslashes: $jmeno = addslashes($http_get_vars[ jmeno ]); $sql = select * from hraci where jmeno = $jmeno ; echo $sql; - ve výsledku nám pak vyjde jak přípustný tak i nepřípustný parametr: PŘÍKLAD URL1: http://xeon.spskladno.cz/~skalaj/reparat_2012/reparat.php?jmeno=petr VÝSLEDEK 1: select * from hraci where jmeno = petr URL2: http://xeon.spskladno.cz/~skalaj/reparat_2012/reparat.php?jmeno= petr' VÝSLEDEK 2: select * from hraci where jmeno = \ petr 21. PRÁCE SE SOUBORY - načítání skriptů do skriptu = umožňuje vytvořit jediný univerzální soubor se skriptem, který se dá načíst následně i do ostatních programů - zvláštní přípona = pokud vybíráme souboru se skriptem koncovku, je vhodné příponu přidružit k php namapováním na php.exe, php.dll, či php4isapi.dll a pro naprostou bezpečnost je vhodné ukládat tyto soubory mimo strukturu webu - příkazy REQUIRE a INCLUDE = provádí načtení obsahu v místě jeho zápisu, rozdíl mezi těmito příkazy je však ten, že require vkládaný skript vloží pouze jedinkrát, i kdybychom příkaz zařadili víckrát například do smyčky require adresář/název_souboru_pro_načtení ; include adresář/název_souboru_pro_načtení ; 14
22. ČTENÍ A ZÁPIS DO TEXTOVÝCH SOUBORŮ - fopen = funkce, která vytvoří nový soubor či edituje soubor // syntaxe: fopen (název_souboru, mode [, použít_include_path]) PARAMETRY FUNKCE FOPEN r otevře soubor pouze pro čtení a umístí ukazatel na začátek souboru r+ otevře soubor pro zápis i čtení a ukazatel přemístí na začátek souboru, soubor již musí existovat w otevře soubor pro zápis nových dat a jeho původní obsah zruší, pokud soubor daného jména doposud neexistoval funkce jej vytvoří, z toho plyne že tento parametr se používá pro vytvoření nových souborů w+ obdobně jako předchozí hodnota parametru s tím rozdílem, že soubor lze také číst a otevře soubor pro zápis nových dat a umístí ukazatel na konec souboru, tzn. Že nová data budou připojena ke starým, pokud soubor zadaného jména neexistuje bude vytvořen a+ obdoba předchozí hodnoty parametru s tím rozdílem, že soubor lze opět číst FUNKCE PRO ČTENÍ, ZÁPIS A PRÁCI S TEXTOVÝMI SOUBORY file_exists umožňuje nám zjistit existenci souboru fclose otevřený datový soubor uzavře a ukončí možnost s ním pracovat fgets funkce čte data o zadané délce a odstraňuje ze souboru html a php tagy fgetc umožňuje ze souboru přečíst jediný znak fputs, fwrite zapíše řetězec do otevřeného datového souboru readfile funkce, která čte data ze souboru a vyvolává je na obrazovku copy slouží ke kopírování zdrojového souboru jinam if (!copy($file, $file,..bak )) { print ( Soubor $file se nepovedlo zkopírovat ); } rename změní název souboru if (!file_exists( index.php ) && rename ( default.php, testindex.php )) echo Soubor byl přejmenován ; unlink smaže soubor zadaného jména z disku if (unlink( test.txt )) echo Soubor byl smazán ; filesize zjistí velikost souboru v bajtech $size = filesize( test.txt ); echo Velikost souboru:.$size; filectime zjistí čas vytvoření souboru v sekundách uplynulých od data 1. 1. 1970 $cas = filectime( test.txt ); echo Vytvořeno:.date( d.m.y, $cas); filemtime zjistí čas poslední modifikace souboru v sekundách uplynulých od stejného data jako u minulé funkce 15
23. COOKIES - pomocí cookies ukládáme malé datové soubory na disku návštěvníka webu pomocí nich můžeme zjišťovat, jak často se k nám uživatel vrací, co ho nejvíce zajímá a tyto údaje poté využít při dalším vývoji - pro práci s cookies je nám nabízena jednoduchá funkce setcookie() a speciální datová lekce HTTP_COOKIE_VARS také zkráceně _COOKIE pro jejich načtení a následné zpracování - uložení dat jako cookies = základní funkcí pro práci s cookies je setcookie, slouží právě k uložení dat ve formě cookies u uživatele, syntaxe pak vypadá takto: setcookie (string name, string value, int expire, string path, string domain, int secure) - pro zjištění existence cookie můžeme využít standartní funkci ISSET [dále také určuje, zda je proměnná stanovená] 24. NAHRÁVÁNÍ SOUBORŮ NA WEB - formulář pro upload obsahuje speciální vlastnost, známou též jako enctype a to proto, že přenášená data mají dva různé typy obsahu jeden je standartní POST a jednou se přenáší binární data - nastavení umístění uploadovaných souborů, se většinou nalézá v PHP.ini, a to na řádku upload_tmp_dir SPECIÁLNÍ PROMĚNNÉ PRO UPLOADOVÁNÍ SOUBORŮ $the_file_name původní název souboru $the_file dočasný název souboru v temp adresáři $the_file_size velikost souboru v bajtech $the_file_type mime type souboru 16
25. SPRÁVA SESSIONS - session vždy musí začínat syntaxí session_start(); a to na samém počátku celého skriptu (avšak je zde i možnost tuto podmínku nastavit v konfiguračním souboru PHP.ini) - dobré je si také zapamatovat, jaký je rozdíl mezi session a cookies, protože zpočátku se vám může zdát, že se jedná prakticky o totéž, avšak: [!] cookies slouží k trvalému uchování informace v prohlížeči svázané s danou www doménou, ovšem sessions slouží k uchování informace na straně serveru vztahující se ke konkrétnímu návštěvníkovi po dobu sezení session.auto_start session.save_path session.cookie_lifetime session.gc_probability session.gc_maxlifetime session.use_cookies KONFIGURAČNÍ PARAMETRY PRO PHP.ini nabývá hodnot 0 = vypnuto / 1 = zapnuto a určuje, zda má být objekt session inicializován automaticky při požadavku na PHP stránku udává adresář, kam se soubory cookies dotyčné session budou ukládat specifikuje délku života cookie dané session v sekundách umožňuje při každé inicializaci objektu session odstranit veškerá stará a již nepotřebná data nastaví v sekundách maximální dobu platnosti hodnot uložených v session pokud parametr nabyde hodnoty 1, povolujeme tím využití klientských cookies pro účely dané session - VYTVOŘENÍ PROMĚNNÝCH PRO SESSION = práce se session začíná, jak již bylo řečeno session_start a ukončuje se pomocí session_destroy funkcí, která zruší veškerá data uložená v aktivní session, dále pak přiřazujeme hodnoty do objektu session pomocí session_register, kde je parametrem název proměnné a následně si ověříme její existenci pomocí funkce session_is_registered a samotný výpis provedeme za pomoci $_SESSION - ZRUŠENÍ PROMĚNNÝCH PRO SESSION = pro nejvyšší bezpečnost se využívá syntaxe unset($_session[ název_proměnné ]); a následně pro zrušení dat opět funkce session_destroy - VYPRŠENÍ ČASOVÉHO LIMITU PRO GENEROVÁNÍ STRÁNKY [TIMEOUT] = hodnota TimeOutu, je defaultně stanovena na 30 sekund, avšak PHP nabízí možnost tuto hodnotu upravovat pro každý skript zvlášt za pomoci funkce set_time_limit: //syntaxe: set_time_limit(900); - stanoví limit pro vygenerování stránky na 15 minut - existuje také alternativa v podobě funkce ignore_user_abord, která říká, že v provádění skriptu má pokračovat, i když klient ukončí činnost 17
POUŽITÁ LITERATURA [1] kniha: PHP PRO ÚPLNÉ ZAČÁTEČNÍKY: 2. PŘEPRACOVANÉ A ROZŠÍŘENÉ VYDÁNÍ autor: JAKUB MACH vydavatelství: COMPUTER PRESS, a.s. -- BRNO, 2006 [2] web: url: TVORBA WEBU www.tvorba-webu.cz [1] [2] 18