PHP 5 a MySQL. kompendium znalostí pro za áte níky i profesionály NOVÉ, T ETÍ VYDÁNÍ



Podobné dokumenty
PHP a MySQL 5 VELKÁ KNIHA KOMPENDIUM ZNALOSTÍ PRO ZAČÁTEČNÍKY I PROFESIONÁLY. W. Jason Gilmore

1. Webový server, instalace PHP a MySQL 13

1 Webový server, instalace PHP a MySQL 13

Kapitola 23 Úvod do PDO

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Vstupní požadavky, doporučení a metodické pokyny

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Maturitní otázky z předmětu PROGRAMOVÁNÍ

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Olga Rudikova 2. ročník APIN

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320

Obsah. Rozdíly mezi systémy Joomla 1.0 a Systém Joomla coby jednička online komunity...16 Shrnutí...16

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Obsah. Úvodem 9 Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

programování formulářů Windows

Kurz je rozdělen do čtyř bloků, které je možné absolvovat i samostatně. Podmínkou pro vstup do kurzu je znalost problematiky kurzů předešlých.

Zrychlete své WWW stránky!

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Ukázka knihy z internetového knihkupectví

Maturitní témata Školní rok: 2015/2016

Microsoft Access tvorba databáze jednoduše

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

Implementace LMS MOODLE. na Windows 2003 Server a IIS 6.0

VZOROVÝ STIPENDIJNÍ TEST Z INFORMAČNÍCH TECHNOLOGIÍ

INFORMAČNÍ SYSTÉMY NA WEBU

Vývoj moderních technologií při vyhledávání. Patrik Plachý SEFIRA spol. s.r.o.

8 Třídy, objekty, metody, předávání argumentů metod

MBI - technologická realizace modelu

Instalace a konfigurace web serveru. WA1 Martin Klíma

ČÁST 1 ÚVOD. Instalace operačního systému 21 Aktualizace operačního systému 57 Příkazový řádek 77 Windows Script Host 103 ČÁST 2 ŘEŠENÍ

PHP tutoriál (základy PHP snadno a rychle)

Formy komunikace s knihovnami

17. července :51 z moravec@yahoo.com

Obsah. Úvodem 9. Kapitola 1 Než začneme 11. Kapitola 2 Dynamické zobrazování obsahu 25. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

Snadný vývoj webových aplikací s Nette. Lukáš Jelínek

KOMPONENTY APLIKACE TreeINFO. Petr Štos ECM Business Consultant

Počítačové kurzy buildit

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

4. lekce Přístup k databázi z vyššího programovacího jazyka

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Zoner PhotoStudio 11 archivace, správa, publikování a základní úpravy digitálních fotografií

O Apache Derby detailněji. Hynek Mlnařík

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Maturitní projekt do IVT Pavel Doleček

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

SRSW4IT Inventarizační SW. Prezentace aplikace. Vedoucí DP: ing. Lukáš Macura Autor: Bc. Petr Mrůzek

Aplikace pro srovna ní cen povinne ho ruc ení

Dobrý SHOP Popis produktu a jeho rozšíření

24 Uživatelské výběry

Obsah. O autorech 9 Earle Castledine 9 Myles Eftos 9 Max Wheeler 9 Odborný korektor 10. Předmluva 11 Komu je kniha určena 12 Co se v knize dočtete 12

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

WNC::WebNucleatCreator

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

BM Software, Databáze Docházky 3000 na NAS serveru (pro MySQL) Němčičky 84, Němčičky u Břeclavi. Úvodní informace:

Profilová část maturitní zkoušky 2017/2018

Stručný obsah. K2118.indd :15:27

Co je nového v aplikaci PaperPort 12?

DUM 12 téma: Příkazy pro tvorbu databáze

Tovek Server. Tovek Server nabízí následující základní a servisní funkce: Bezpečnost Statistiky Locale

Sada 1 - PHP. 03. Proměnné, konstanty

Použití databází na Webu

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

RAW s programem Adobe Photoshop CS

Aplikační vrstva. Úvod do Php. Ing. Martin Dostal

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

ALGORITMIZACE A PROGRAMOVÁNÍ

Microsoft Word základní

Specifikace požadavků. POHODA Web Interface. Verze 1.0. Datum: Autor: Ondřej Šrámek

Webové rozhraní pro datové úložiště. Obhajoba bakalářské práce Radek Šipka, jaro 2009

M4 PDF rozšíření. Modul pro PrestaShop.

Redakční systém Joomla. Prokop Zelený

Drupal. Svobodný redakční systém. duben 2007 Jakub Suchý 1

STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

WORKWATCH ON-LINE EVIDENCE PRÁCE A ZAKÁZEK

APS Administrator.OP

Pochvalná vyjádření k prvnímu vydání Hacking umění exploitace

InterSystems Caché Post-Relational Database

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Experimentální systém pro WEB IR

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Informace k e-learningu

Zálohování v MS Windows 10

Transkript:

E N C Y K L O P E D I E Z O N E R P R E S S VELKÁ KNIHA PHP 5 a MySQL kompendium znalostí pro za áte níky i profesionály NOVÉ, T ETÍ VYDÁNÍ W. Jason Gilmore

Velká kniha PHP 5 a MySQL Kompendium znalostí pro začátečníky i profesionály Kompendium znalostí pro začátečníky i profesionály NOVÉ, TŘETÍ VYDÁNÍ W. Jason Gilmore

Beginning PHP and MySQL: From Novice to Professional, Fourth Edition W. Jason Gilmore Original edition copyright 2010 by W. Jason Gilmore. Czech edition copyright 2011 by ZONER software, a.s. All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright the publisher. Copyright originálního vydání 2010 W. Jason Gilmore. Copyright českého vydání 2011 ZONER software, a.s. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována nebo předávána žádnou formou nebo způsobem, elektronicky ani mechanicky, včetně fotokopií, natáčení ani žádnými jinými systémy pro ukládání bez výslovného svolení držitele autorských práv. Velká kniha PHP 5 a MySQL (nové, třetí vydání) Autor: W. Jason Gilmore Copyright ZONER software, a.s. Vydání třetí, v roce 2011. Všechna práva vyhrazena. Zoner Press Katalogové číslo: ZR1114 ZONER software, a.s. Nové sady 18, 602 00 Brno Překlad: RNDr. Jan Pokorný Odpovědný redaktor: Miroslav Kučera Šéfredaktor: Ing. Pavel Kristián DTP a obálka: Miroslav Kučera a Lenka Křížová Fotografie na obálce: Jana Vališová Zdrojové soubory ke stažení: http://zonerpress.cz/download/velka-kniha-php5-treti-vydani.rar Informace, které jsou v této knize zveřejněny, mohou byt chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývajících důsledků. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani distribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele, s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí. Veškeré dotazy týkající se distribuce směřujte na: Zoner Press ZONER software, a.s Nové sady 18, 602 00 Brno tel.: 532 190 883 e-mail: knihy@zoner.cz www.zonerpress.cz ISBN: 978-80-7413-163-9

3 Stručný obsah Kapitola 1 Úvod do PHP 27 Kapitola 2 Konfigurace prostředí 35 Kapitola 3 Základy PHP 65 Kapitola 4 Funkce 111 Kapitola 5 Pole 121 Kapitola 6 Objektově orientované PHP 149 Kapitola 7 Pokročilé schopnosti OOP 171 Kapitola 8 Obsluha chyb a výjimek 187 Kapitola 9 Řetězce a regulární výrazy 203 Kapitola 10 Práce se souborovým a s operačním systémem 239 Kapitola 11 PEAR 265 Kapitola 12 Datum a čas 275 Kapitola 13 Práce s HTML formuláři 293 Kapitola 14 Autentizace uživatelů 307 Kapitola 15 Upload souborů 323 Kapitola 16 Networking 335 Kapitola 17 PHP a LDAP 353 Kapitola 18 Obsluha relací 367 Kapitola 19 Šablony se Smarty 385 Kapitola 20 Webové služby 407 Kapitola 21 Zabezpečení webu 421 Kapitola 22 Ajax a PHP 431

4 Kapitola 23 Budování webů pro celý svět 443 Kapitola 24 Zend Framework 451 Kapitola 25 Úvod do MySQL 469 Kapitola 26 Instalace a konfigurace MySQL 477 Kapitola 27 Klienti pro MySQL 493 Kapitola 28 Ukládací enginy MySQL a datové typy 513 Kapitola 29 Zabezpečení MySQL 539 Kapitola 30 Používání PHP s MySQL 565 Kapitola 31 Úvod do PDO 585 Kapitola 32 Uložené rutiny 603 Kapitola 33 Triggery MySQL 623 Kapitola 34 Pohledy MySQL 633 Kapitola 35 Databázové dotazy v praxi 645 Kapitola 36 Indexy a vyhledávání 663 Kapitola 37 Transakce 677 Kapitola 38 Import a export dat 687 Rejstřík 701

5 Obsah O autorovi 25 O odborném recenzentovi 25 Poděkování 25 Úvod 26 Zdrojové kódy 26 Kapitola 1 Úvod do PHP 27 Historie 28 PHP 4 28 PHP 5 29 PHP 5.3 30 PHP 6 30 Všeobecné vlastnosti jazyka 31 Praktičnost 31 Vyspělost 32 Možnosti 32 Cena 33 Shrnutí 33 Kapitola 2 Konfigurace prostředí 35 Předběžné kroky před vlastní instalací 36 Stažení Apache 36 Stažení PHP 36 Stažení dokumentace 37 Instalace Apache a PHP na Linuxu 38 Instalace Apache a PHP na Windows 39 Instalace IIS a PHP na Windows 41 Otestování instalace 41 Konfigurace PHP 43 Konfigurace PHP v čase sestavování na Linuxu 43 Přizpůsobení distribuce sestavené pro Windows 44 Konfigurace při běhu 44 Správa konfiguračních direktiv PHP 44 Konfigurační direktivy PHP 46

6 Volba editoru kódu 60 Adobe Dreamweaver CS5 60 Notepad++ 61 PDT (PHP Development Tools) 61 Zend Studio 61 Výběr poskytovatele webhostingu 61 Sedm otázek potenciálnímu poskytovateli webhostingu 62 Shrnutí 63 Kapitola 3 Základy PHP 65 Vkládání kódu PHP do webových stránek 65 Výchozí syntaxe 66 Krátké značky 66 Styl <script> 67 Styl ASP 67 Vkládání několika bloků kódu 67 Komentáře 68 Syntaxe jediného řádku z C++ 68 Syntaxe shellu 68 Komentář na několika řádcích ve stylu C 68 Výstup dat do prohlížeče 69 Příkaz print() 69 Příkaz echo() 70 Příkaz printf() 71 Příkaz sprintf() 72 Datové typy podporované PHP 72 Skalární datové typy 73 Složené datové typy 74 Konverze mezi datovými typy pomocí přetypování 76 Žonglování s typy 77 Funkce vztahující se k typům 77 Funkce ověřující, zda je proměnná daného typu 78 Identifikátory 79 Proměnné 79 Deklarace proměnné 80 Obor proměnné 81 Superglobální proměnné PHP 84

7 Proměnné proměnné 88 Konstanty 88 Definice konstanty 89 Výrazy 89 Operandy 89 Operátory 90 Interpretace řetězců 96 Uvozovky 96 Posloupnosti řídicích znaků 96 Apostrofy 97 Složené závorky 98 Syntaxe Heredoc 98 Syntaxe Nowdoc 98 Řídící struktury 99 Podmínkové příkazy 99 Příkazy pro cyklus 101 Příkazy pro vkládání souborů 107 Shrnutí 110 Kapitola 4 Funkce 111 Volání funkcí 111 Vytvoření funkce 112 Předávání argumentů hodnotou 113 Předávání argumentů odkazem 113 Výchozí hodnoty argumentů 114 Funkcionalita Type Hinting 115 Návratové hodnoty funkcí 115 Rekurzivní funkce 117 Knihovny funkcí 119 Shrnutí 120 Kapitola 5 Pole 121 Co je pole? 121 Vytvoření pole 123 Vytváření polí funkcí array() 123 Extrakce polí s konstrukcí list() 124

8 Plnění polí předdefinovaným rozsahem hodnot 125 Test, zda se jedná o pole 125 Výstup obsahu pole 126 Tisk polí pro testovací potřeby 127 Přidávání a odstraňování prvků pole 127 Přidání hodnoty před pole 127 Přidání hodnoty na konec pole 128 Odstranění hodnoty na začátku pole 128 Odstranění hodnoty z konce pole 128 Vyhledávání prvků v poli 129 Vyhledání hodnoty v poli 129 Získávání klíčů z pole 130 Získávání hodnot z pole 130 Procházení polí 130 Získání aktuálního klíče z pole 131 Získání aktuální hodnoty z pole 131 Získání aktuálního klíče a hodnoty z pole 132 Posouvání ukazatele pole 132 Předávání hodnot pole do funkce 133 Zjištění velikosti a jedinečných hodnot pole 134 Zjištění velikosti pole 134 Zjištění četností hodnot v poli 135 Zjištění jedinečných hodnot v poli 135 Setřídění prvků polí 136 Opačné pořadí prvků pole 136 Prohození klíčů a hodnot v poli 136 Setřídění prvků v poli 137 Zkombinování, sloučení, extrakce a porovnání polí 141 Slučování polí 141 Slučování polí s rekurzívním přidáváním polí 142 Zkombinování pole klíčů a pole hodnot do jediného pole 142 Řez z pole 143 Pole prvků odstraněných z pole 143 Průnik polí 144 Průnik asociativních polí 145 Rozdíl polí 145 Rozdíl asociativních polí 146 Další užitečné funkce pro práci s poli 146

9 Vrácení náhodné sady klíčů 146 Zamíchání prvků pole 147 Součet hodnot polí 147 Členění pole na části 147 Shrnutí 148 Kapitola 6 Objektově orientované PHP 149 Výhody plynoucí z OOP 149 Zapouzdření 149 Dědění 150 Polymorfismus 150 Klíčové pojmy OOP 151 Třídy 151 Objekty 152 Vlastnosti 152 Konstanty 158 Metody 159 Konstruktory a destruktory 162 Konstruktory 163 Destruktory 165 Statické členy tříd 166 Klíčové slovo instanceof 167 Pomocné funkce 167 Vytváření aliasu pro třídu 168 Existence třídy 168 Určení kontextu objektu 168 Pole metod třídy 168 Pole vlastností třídy 168 Pole deklarovaných tříd 168 Pole vlastností objektu 169 Určení rodičovské třídy objektu 169 Existence rozhraní 169 Určení typu objektu 169 Určení typu podtřídy objektu 169 Existence metody 169 Automatické načítání objektů 170 Shrnutí 170

10 Kapitola 7 Pokročilé schopnosti OOP 171 Schopnosti OOP nepodporované v PHP 172 Klonování objektů 172 Příklad klonování 172 Metoda clone() 174 Dědění 175 Dědění třídy 175 Dědění a konstruktory 177 Dědění a pozdní statické vázání 179 Rozhraní 180 Implementace jediného rozhraní 181 Implementace několika rozhraní 182 Abstraktní třídy 183 Úvod do jmenných prostorů 183 Shrnutí 186 Kapitola 8 Obsluha chyb a výjimek 187 Konfigurační direktivy 188 Nastavení žádané úrovně citlivosti na chyby 188 Zobrazování chyb do prohlížeče 189 Zobrazování chyb při startu 190 Protokolování chyb 190 Identifikace protokolovacího souboru 190 Nastavení maximální délky protokolu 190 Ignorování opakujících se chyb 190 Ignorování chyb pocházejících ze stejného umístění 190 Uložení nejnovější chybové zprávy do proměnné 190 Protokolování chyb 191 Inicializace výbavy PHP pro protokolování 191 Otevření připojení pro potřeby protokolování 191 Uzavření protokolovacího připojení 192 Odeslání zprávy na cíl protokolování 192 Obsluha výjimek 193 Proč je obsluha výjimek tak skvělá 193 Implementace obsluhy výjimek v PHP 195 Výjimky standardní knihovny PHP 200 Shrnutí 201

11 Kapitola 9 Řetězce a regulární výrazy 203 Regulární výrazy 204 Syntaxe regulárních výrazů ve stylu POSIX 204 Funkce PHP pro práci s regulárními výrazy rozšířený styl POSIX 206 Funkce PHP pro regulární výrazy ve stylu Perl 209 Funkce PHP pro práci s regulárními výrazy kompatibilní s Perlem 212 Další funkce pro práci s řetězci 217 Určování délky řetězce 217 Porovnávání dvou řetězců 218 Manipulace s velikostmi písmen 220 Převádění řetězců do HTML a z HTML 221 Alternativy pro funkce regulárních výrazů 226 Rozklad řetězce na prvky podle předem definovaných znaků 226 Rozklad řetězce podle předem definovaného oddělovače 227 Převod pole na řetězec 227 Komplexnější rozklad řetězce 228 Nalezení posledního výskytu podřetězce v řetězci 228 Nahrazení všech výskytů řetězce jiným řetězcem 229 Získání části řetězce 230 Vrácení části řetězce na základě předem definovaného offsetu 230 Četnost výskytu podřetězce v řetězci 231 Nahrazení části řetězce jiným řetězcem 231 Doplňování a zkracování řetězce 232 Počítání znaků a slov 233 Balíček PEAR: Validate_US 235 Instalace balíku Validate_US 236 Jak se používá balík Validate_US 236 Shrnutí 237 Kapitola 10 Práce se souborovým a s operačním systémem 239 Soubory a adresáře 240 Rozklad cest k adresářům 240 Zjišťování velikosti souboru, adresáře a disku 242 Časy posledního přístupu a modifikace 244 Práce se soubory 246 Pojem zdroj 246

12 Rozpoznání znaků pro nový řádek 246 Rozpoznání konce souboru 246 Otevření a uzavření souboru 247 Čtení ze souboru 249 Zapisování do souboru 255 Přesouvání ukazatele souboru 255 Čtení obsahu adresářů 256 Vykonávání příkazů shellu 257 Odstranění adresáře 257 Přejmenování souboru 258 Nastavení časů poslední modifikace a přístupu k souboru 259 Vykonávání programů na systémové úrovni 259 Dezinfekce vstupů od uživatele 259 Funkce PHP pro spouštění programů 261 Shrnutí 263 Kapitola 11 PEAR 265 Ukázka síly PEAR: konverze číselných formátů 266 Instalace a aktualizace PEAR 266 Instalace PEAR 267 PEAR a hostitelské firmy 268 Aktualizace PEAR 268 Manažer balíků PEAR 268 Prohlídka nainstalovaných balíků 269 Získání dalších informací o nainstalovaném balíku 269 Instalace balíků PEAR 270 Zahrnutí balíku do skriptu 272 Upgrade balíků 272 Odinstalování balíku 273 Přechod na starší verzi balíku 273 Úvod do Pyrus 274 Instalace Pyrus 274 Shrnutí 274 Kapitola 12 Datum a čas 275 Časové razítko Unixu 275

13 Knihovna PHP pro datum a čas 276 Ověřování platnosti data 276 Formátování data a času 277 Práce s časovými razítky 281 Řešení běžných úloh souvisejících s datem a časem 283 Zobrazení lokalizovaného data a času 283 Zobrazení data poslední modifikace webové stránky 287 Počet dní aktuálního měsíce 287 Počet dní specifikovaného měsíce 288 Určení data vzdáleného x dní od aktuálního data 288 Vylepšená výbava pro datum a čas v PHP 5.1 289 Konstruktor DateTime 289 Formátování data 290 Nastavení data po vytvoření instance 290 Nastavení času po vytvoření instance 290 Modifikace data a času 291 Výpočet rozdílu mezi dvěma daty 291 Shrnutí 291 Kapitola 13 Práce s HTML formuláři 293 PHP a webové formuláře 293 Jednoduchý příklad 294 Ověřování platnosti dat formuláře 295 Odstranění souboru 295 Skriptování přes weby 296 Desinfekce uživatelského vstupu 297 Validace a dezinfekce dat s rozšířením Filter 300 Práce s vícehodnotovými komponentami formuláře 301 Těžíme z předností PEAR: HTML_QuickForm2 303 Instalace HTML_QuickForm2 303 Vytvoření a validace jednoduchého formuláře 304 Shrnutí 306 Kapitola 14 Autentizace uživatelů 307 Autentizace HTTP 307 Využití schopnosti.htaccess Apache 308

14 Autentizace prostřednictvím PHP 309 Proměnné autentizace 309 Užitečné funkce 310 Způsoby autentizace v PHP 311 Záležitosti kolem uživatelských hesel 317 Otestování síly hesla s knihovnou CrackLib 317 Jednorázová URL a obnova hesla 319 Shrnutí 321 Kapitola 15 Upload souborů 323 Nahrávání souborů přes protokol HTTP 323 Nahrávání souborů na server s PHP 324 Direktivy PHP pro nahrávání souborů a zdroje 324 Pole $_FILES 326 Funkce PHP pro nahrávání na server 326 Chybové zprávy týkající se nahrávání 328 Nahrání souboru: jednoduchý příklad 329 Využívání předností PEAR: HTTP_Upload 330 Instalace HTTP_Upload 330 Upload souboru 330 Získání dalších informací o nahraném souboru 331 Nahrávání více souborů najednou 332 Shrnutí 333 Kapitola 16 Networking 335 DNS, služby a servery 336 DNS 336 Služby 340 Práce s e-mailem 342 Konfigurační direktivy 342 Odesílání e-mailů skriptem PHP 343 Běžné síťové úkoly 348 Ping na server 348 Vytvoření skeneru portů 349 Vytvoření převaděče síťových adres 350 Testování šířky pásma uživatele 351 Shrnutí 352

15 Kapitola 17 PHP a LDAP 353 PHP a LDAP 354 Konfigurace LDAP pro PHP 354 Připojení k LDAP serveru 354 Získávání dat LDAP 357 Počet získaných položek 360 Řazení LDAP záznamů 360 Vkládání dat LDAP 361 Aktualizace dat LDAP 362 Odstraňování dat LDAP 363 Manipulace s DN 364 Obsluha chyb 365 Shrnutí 366 Kapitola 18 Obsluha relací 367 Co je obsluha relace? 367 Proces obsluhy relace 368 Konfigurační direktivy 368 Správa média úložiště relace 369 Nastavení cesty k souborům relace 369 Zapnutí relace automaticky 369 Nastavení názvu relace 370 Volba cookies nebo přepisování URL 370 Automatizace přepisování URL 370 Nastavení doby života cookie relace 370 Nastavení platné URL cesty pro cookie relace 370 Nastavení způsobu ukládání do cache na stránkách se zapnutou relací 371 Práce s relacemi 372 Odstartování relace 372 Likvidace relace 373 Nastavení a získání ID relace 373 Vytváření a odstraňování proměnných relace 373 Zakódování a dekódování dat relace 374 Obsluha relace praktické příklady 376 Automatické přihlašování vracejících se uživatelů 376 Seznam naposledy prohlížených dokumentů 378

16 Vytváření vlastních obsluh relace 380 Včlenění vlastních funkcí relace do logiky PHP 381 Vlastní obsluha relace založená na MySQL 381 Shrnutí 384 Kapitola 19 Šablony se Smarty 385 Šablonovací systém? Co to je? 386 Úvod do Smarty 387 Instalace Smarty 388 Pracujeme se Smarty 389 Prezentační logika Smarty 391 Komentáře 391 Modifikátory proměnné 391 Řídící struktury 394 Příkazy 398 Vytváření konfiguračních souborů 400 Metoda configload 401 Odkazy na konfigurační proměnné 401 Používání CSS ve spolupráci se Smarty 402 Ukládání stránek do cache 403 Doba života stránek uložených v cache 403 Eliminace režijních nákladů na zpracování s is_cached() 404 Cachování více verzí jedné šablony 404 Několik slov závěrem k ukládání do cache 405 Shrnutí 406 Kapitola 20 Webové služby 407 Proč webové služby? 408 RSS (Real Simple Syndication) 409 Syntaxe RSS 410 Úvod do SimplePie 412 Instalace SimplePie 412 Rozklad souboru RSS se SimplePie 413 Rozklad více souborů RSS 414 SimpleXML 415 Funkce SimpleXML 416

17 Rozklad XML 417 Shrnutí 420 Kapitola 21 Zabezpečení webu 421 Bezpečná konfigurace PHP 422 Konfigurační parametry vztahující se k bezpečnosti 422 Skrývání konfiguračních detailů 424 Skrývání Apache 424 Skrytí PHP 425 Skrývání citlivých dat 426 Skrytí kořenu dokumentů 426 Zamítnutí přístupu k souborům s určitými příponami 427 Šifrování dat 427 Šifrovací funkce PHP 427 MCrypt 428 Shrnutí 430 Kapitola 22 Ajax a PHP 431 Úvod do Ajaxu 431 Úvod do jquery 433 Instalace jquery 433 Jednoduchý příklad 433 Reakce na události 434 jquery a DOM 435 Kontrola existence uživatelského jména 437 Skript pro kontrolu existence uživatelského jména 439 Integrace funkcionality Ajaxu 440 Shrnutí 441 Kapitola 23 Budování webů pro celý svět 443 Překládání webů s Gettext 444 Krok 1: aktualizace skriptů webu 444 Krok 2: vytvoření lokalizačního depozitáře 445 Krok 3: vytvoření překladových souborů 446 Krok 4: překlad textu 447 Krok 5: vygenerování binárních souborů 447

18 Krok 6: nastavení žádaného jazyka ve skriptech 447 Lokalizace data, čísel a času 448 Shrnutí 450 Kapitola 24 Zend Framework 451 Úvod do MVC 451 Frameworky v PHP 453 Framework CakePHP 454 Framework Solar 454 Framework symfony 454 Zend Framework 455 Úvod do Zend Frameworku 455 Instalace Zend Frameworku 456 Vytvoření prvního webu řízeného Zend Frameworkem 457 Shrnutí 467 Kapitola 25 Úvod do MySQL 469 Proč je MySQL tak populární? 469 Flexibilita 470 Výkon 470 Flexibilní licenční možnosti 472 (Hyper) aktivní komunita uživatelů 473 Evoluce MySQL 473 MySQL 4 473 MySQL 5 474 MySQL 5.1 475 MySQL 5.4 a 5.5 475 Prominentní uživatelé MySQL 475 craigslist 476 Wikipedia 476 Další prominentní uživatelé 476 Shrnutí 476 Kapitola 26 Instalace a konfigurace MySQL 477 Stažení MySQL 477 Instalace MySQL 478

19 Instalace MySQL na Linuxu 478 Instalace a konfigurace MySQL na Windows 481 Nastavení hesla administrátora MySQL 483 Start a zastavení MySQL 484 Ruční ovládání démona 484 Konfigurace a optimalizace MySQL 485 Obal mysqld_safe 485 Konfigurační a optimalizační parametry MySQL 486 Soubor my.cnf 489 Konfigurace PHP pro spolupráci s MySQL 492 Překonfigurace PHP na Linuxu 492 Překonfigurace PHP na Windows 492 Shrnutí 492 Kapitola 27 Klienti pro MySQL 493 Klienti příkazového řádku pro MySQL 493 Klient mysql 493 Klient mysqladmin 503 Další užiteční klienti 505 Volby pro klienty 508 Klienti s grafickým rozhraním pro MySQL 510 MySQL Workbench 511 Nástroj phpmyadmin 511 Shrnutí 512 Kapitola 28 Ukládací enginy MySQL a datové typy 513 Ukládací enginy 513 MyISAM 514 IBMDB2I 516 InnoDB 516 MEMORY 517 MERGE 518 FEDERATED 518 ARCHIVE 520 CSV 520 EXAMPLE 520 BLACKHOLE 520

20 Časté otázky týkající se ukládacích enginů 521 Datové typy a atributy 522 Datové typy 522 Atributy datových typů 528 Práce s databázemi a s tabulkami 531 Práce s databázemi 531 Práce s tabulkami 532 Změny ve struktuře tabulky 535 Databáze INFORMATION_SCHEMA 536 Shrnutí 538 Kapitola 29 Zabezpečení MySQL 539 Co udělat nejdříve? 540 Zabezpečení démona mysqld 541 Systém přístupových oprávnění MySQL 541 Jak systém přístupových oprávnění pracuje 542 Kde jsou uloženy informace o přístupových oprávněních? 543 Správa uživatelů a přístupových oprávnění 553 Vytváření uživatelů 553 Odstraňování uživatelů 553 Přejmenování uživatelů 554 Příkazy GRANT a REVOKE 554 Prohlížení oprávnění 559 Limity na spotřebu zdrojů uživateli 560 Zabezpečená připojení MySQL 560 Volby příkazu GRANT, které se týkají SSL 561 Volby SSL 563 Nastartování serveru MySQL se zapnutou podporou SSL 564 Připojení pomocí klienta se zapnutým SSL 564 Uložení voleb SSL do souboru my.cnf 564 Shrnutí 564 Kapitola 30 Používání PHP s MySQL 565 Předběžné informace 566 Zpřístupnění rozšíření mysqli na Linuxu/Unixu 566 Zpřístupnění rozšíření mysqli na Windows 566 Používání nativního ovladače MySQL 566

21 Přístupová oprávnění uživatelů 567 Ukázková data 567 Práce s rozšířením mysqli 568 Příprava připojení a jeho ukončení 568 Obsluha chyb připojení 569 Získání informací o chybě 569 Uložení informací o připojení do separátního souboru 571 Zabezpečení informací o připojení 571 Interakce s databází 572 Odeslání dotazu do databáze 572 Rozklad výsledků dotazu 574 Určení počtu vybraných řádků a ovlivněných řádků 576 Práce s připravenými příkazy 577 Vykonávání databázových transakcí 582 Zapnutí módu automatického potvrzování 582 Potvrzení transakce 583 Anulování transakce 583 Shrnutí 583 Kapitola 31 Úvod do PDO 585 Pro další abstraktní databázová vrstva? 586 Způsob práce s PDO 587 Instalace PDO 587 Podpora databází v PDO 588 Připojení k databázovému serveru a výběr databáze 588 Obsluha chyb 590 Získávání a nastavování atributů 592 Spouštění dotazů 593 Úvod k připraveným příkazům 594 Získávání dat 597 Nastavování vázaných sloupců 600 Transakce 601 Shrnutí 602 Kapitola 32 Uložené rutiny 603 Měli bychom používat uložené rutiny? 604 Přednosti uložených rutin 604

22 Nevýhody uložených rutin 604 Jak MySQL implementuje uložené rutiny 605 Vytvoření uložené rutiny 605 Deklarace a nastavování proměnných 608 Spuštění uložené rutiny 609 Uložené rutiny složené z několika příkazů 610 Volání rutiny z jiné rutiny 617 Modifikace uložené rutiny 618 Odstranění uložené rutiny 618 Prohlížení stavu rutiny 618 Prohlížení vytvářecí syntaxe rutiny 620 Podmínky a jejich obsluhy 620 Integrace rutin do webových aplikací 620 Vytvoření rozhraní pro bonusy zaměstnanců 621 Získávání více řádků 622 Shrnutí 622 Kapitola 33 Triggery MySQL 623 Úvod do triggerů 623 Proč používat triggery? 624 Vykonání akce před událostí 624 Vykonání akce po události 624 Triggery spouštěné "před" versus triggery spouštěné "po" 625 Podpora triggerů v MySQL 626 Vytvoření triggeru 626 Prohlížení existujících triggerů 628 Modifikace triggeru 630 Odstranění triggeru 630 Integrace triggerů do webových aplikací 631 Shrnutí 632 Kapitola 34 Pohledy MySQL 633 Úvod do pohledů 634 Podpora pohledů v MySQL 634 Vytváření a spouštění pohledů 634 Prohlížení informací o pohledu 640

23 Modifikace pohledu 641 Odstranění pohledu 642 Aktualizace pohledů 642 Začlenění pohledů do webových aplikací 643 Shrnutí 644 Kapitola 35 Databázové dotazy v praxi 645 Ukázková data 646 Vytváření tabulkových výstupů s PEAR 646 Instalace HTML_Table 647 Vytvoření jednoduché tabulky 647 Vytváření lépe čitelného výstupu řádků 649 Vytvoření tabulky z dat databáze 649 Seřazení výstupu 651 Vytvoření stránkovaného výstupu 652 Číslování stránek výpisu 654 Dotazy na více tabulek s poddotazy 656 Porovnávací operace s poddotazy 657 Určování existence s poddotazy 657 Údržba databáze pomocí poddotazů 658 Používání poddotazů v PHP 658 Procházení sad výsledků pomocí kurzorů 659 Základy práce s kurzory 659 Vytvoření kurzoru 660 Otevření kurzoru 660 Práce s kurzorem 660 Uzavření kurzoru 661 Používání kurzorů s PHP 661 Shrnutí 662 Kapitola 36 Indexy a vyhledávání 663 Indexování databází 663 Primární klíče 664 Jedinečné indexy 665 Normální indexy 666 Fulltextové indexy 668

24 Doporučené praktiky pro práci s indexy 671 Vyhledávání pomocí formuláře 672 Jednoduché hledání 672 Rozšíření vyhledávacích možností 673 Fulltextové vyhledávání 675 Shrnutí 676 Kapitola 37 Transakce 677 Co je transakce? 677 Výbava MySQL pro transakční zpracování 678 Systémové požadavky 678 Vytvoření tabulky 679 Ukázkový projekt 679 Ukázková data 680 Vykonání ukázkové transakce 681 Tipy pro práci s transakcemi 682 Budování transakčních aplikací s PHP 683 Směna zboží za hotové ještě jednou 683 Shrnutí 685 Kapitola 38 Import a export dat 687 Ukázková tabulka 687 Oddělování údajů 688 Import dat 688 Import dat s LOAD DATA INFILE 689 Import dat s mysqlimport 692 Načítání dat do tabulky s PHP 694 Export dat 695 Příkaz SELECT INTO OUTFILE 695 Shrnutí 699 Rejtřík 701

25 O autorovi W. Jason Gilmore je zakladatel společnosti W. J. Gilmore, LLC (www.wjgilmore.com), což je konzultační, publikační a školící firma, která má zkušenosti s obsluhou širokého rozsahu firem, od místních, až po ty, co jsou uvedeny v seznamu Fortune 500. Problematice webového vývoje se věnuje více než deset let, je autorem celkem šesti knih včetně bestsellerů "Beginning PHP and MySQL, Third Edition", "Easy PHP Websites with the Zend Framework" a "Easy PayPal with PHP". Publikoval přes 100 odborných článků, které mj. vyšly na stránkách Developer.com, JSMag a Linux Magazine. Jason je spoluzakladatelem CodeMash, což je nezisková organizace, jejímž úkolem je pořádat stejnojmennou každoroční konferenci vývojářů. Byl také členem výboru pro výběr řečníků na 2008 MySQL Conference. O odborném recenzentovi Matt Wade je programátor, databázový vývojář a systémový administrátor. V současné době ve dne pracuje pro velkou finanční firmu a v noci je na volné noze. Má zkušenosti s programováním v několika jazycích, ale nejčastěji využívá PHP a C. Pokud jde o databáze, pravidelně používá MySQL a Microsoft SQL Server. Je také také uznávaným administrátorem systémů a má zkušenosti s nejrůznějšími servery běžícími na Windows nebo na Linuxu. Preferuje FreeBSD. Matt žije na Floridě ve městě Jacksonville se svou ženou Michelle a se svými třemi dětmi, Matthewem, Jonathanem a Amandou. Ve svém volném čase rybaří, vypomáhá v kostele, nebo hraje nějakou videohru. Matt je zakladatelem Codewalkers.com, což je web určený vývojářům PHP, který vznikl v roce 2007. Poděkování Rychle se blíží desáté výročí vydání mé první knihy, je to milník, který vítám s pokorou a zároveň s úžasem. Ačkoli se na obálce objevuje mé jméno, ve skutečnosti je to sdílený milník. Bez velkého úsilí opravdu nenahraditelné skupiny lidí by nebylo příliš reálné, aby tato kniha vydržela celou dekádu. Komentáře plné nápadů mého dlouholetého odborného korektora Matt Wadea opět nesmírně zdokonalily předkládaný materiál. Projektová manažerka Jennifer Blackwellová odvedla skvělou práci tím, že mě držela na správné cestě a neustále kontrolovala silně napjatý rozvrh prací. Editoři Tom Welsh a Michelle Lowman dohlíželi ostřížím zrakem na kapitoly a průběžně poskytovali cenné rady. Korektorka Mary Behrová zručně pochytala a opravila mé četné gramatické prohřešky. Uznání patří také významnému počtu dalších osob, které měly na starost produkci, marketing, prodej a nesčetné další povinnosti, aby mohla tato kniha spatřit světlo světa. Jako vždy bych rád poděkoval Gary Cornellovi, spoluzakladateli vydavatelství Apress, že mi poskytoval dlouhá léta příležitost prezentovat myšlenky v psané podobě. Těším se na dalších skvělých deset let. Nakonec bych chtěl poděkovat Carli, Jodi, Paulovi, Ruby, svým rodičům a samozřejmě i všem ostatním členům rodiny a mým přátelům, že díky nim vím, že pravý život je tam venku, daleko od klávesnice.

26 Úvod Skvělé knihy o programování se spíše zabývají praktickými problémy než čistou teorií. Přestože nepodléhám žádným iluzím, co se týče mého postavení mezi skvělými autory odborných knih naší doby, vždy jsem usiloval, abych psal ve zmíněném duchu a poskytoval takový materiál, který budete moci využít v praxi pro své vlastní potřeby. Vzhledem k vymezenému objemu knihy je také zřejmé, že jsem se snažil z každého probíraného předmětu vymačkat praktičnost až do poslední kapky. Pokud tedy potřebujete získat praktický vhled do programovacího jazyka PHP a databázového serveru MySQL (se zvláštním důrazem na to, jak s oběma produkty vytvářet dynamické webové aplikace řízené databázemi), je tato kniha určena právě vám. Popudem k novému vydání této knihy (poznámka redaktora: v rukou držíte přeložené 4. vydání anglického originálu) vedlo především horečnaté tempo prací komunit PHP a MySQL. Kromě toho, že jsme aktualizovali materiál v knize tak, aby zahrnoval schopnosti nacházející se v nejnovějších vydáních PHP a MySQL, najdete zde také novou kapitolu, ve které se seznámíte s pojmem AJAX a s populární knihovnou jquery JavaScriptu. Kromě toho byly všechny existující kapitoly pečlivě zrevidovány a v některých případech i značně modifikovány tak, aby se jejich materiál oproti předchozím vydání aktualizoval a zároveň vylepšil. Pokud s PHP teprve začínáte, vřele vám doporučuji, abyste začali s kapitolou 1, protože je dost pravděpodobné, že ze základních vědomostí, které zde prvně získáte, budete moci hodně těžit v dalších kapitolách. Jestliže už PHP znáte, ale databázi MySQL moc ne, zvažte, zda byste neměli raději začít kapitolou 25. Pokročilejší čtenáře vybízím, aby četli knihu podle svého uvážewní koneckonců, není to žádný milostný román. Bez ohledu na to, jakou strategii při četbě zvolíte, pokusil jsem se každou kapitolu rozškatulkovat na úhledné balíčky tak, abyste z ní mohli vytěžit co nejvíc, aniž byste museli předtím zvládnout všechny ostatní kapitoly (samozřejmě kromě těch, které se soustřeďují na základy dané technologie). I nově příchozí a příležitostní vývojáři PHP a MySQL z této knihy leccos získají, protože jsem ji záměrně napsal v takovém formátu, aby mohla být současně návodem i referenční příručkou. Oceňuji skutečnost, že jste vy, nebo váš zaměstnavatel investovali do této knihy nemalé peníze. Proto jsem se usiloval, abych probíranou látku prezentoval v takovém stylu, aby vám tato kniha byla prospěšná nejenom při několika prvních příležitostech, kdy ji pročítáte, ale i dlouhodobě. Zdrojové kódy Zdrojové kódy k ukázkám použitým v této knize naleznete zde: http://zonerpress.cz/download/velka-kniha-php5-treti-vydani.rar

65 KAPITOLA 3 Základy PHP Máme za sebou pouhé dvě kapitoly a už jsme probrali poměrně dost základních informací o jazyku PHP. Seznámili jste se s pozadím a historií vzniku jazyka a hluboko jste se zavrtali do pojmů a postupů souvisejících s instalací a konfigurací. Tím jste si vytvořili dobrou výchozí pozici k tomu, co je jádrem zbývající části knihy: vytváření vyspělých webů řízených PHP. Jejich výklad začíná právě teď a uvedeme si v něm mnoho základních schopností jazyka. Konkrétně se budou probírat tato témata: Jak se vkládá kód PHP do webových stránek. Jak se do kódu vkládají komentáře pomocí různých metodologií, které jsou vypůjčeny ze skriptování shellu Unixu a jazyků C a C++. Jak dostanete data na výstup prostřednictvím příkazů echo(), print(), printf() a sprintf(). Jak se vytvářejí sofistikované skripty pomocí typů dat PHP, proměnných, operátorů a příkazů. Pojednání o klíčových řídících strukturách a příkazech PHP: if-else- elseif, while, foreach, include/require, break, continue a declare. V této kapitole si osvojíte nejen vědomosti nezbytné k tomu, abyste mohli vytvářet sice jen základní, ale přesto prospěšné aplikace PHP. Pochopíte také věci, které vám umožní vytěžit co nejvíce z látky probírané v následujících kapitolách. POZNÁMKA Tato kapitola slouží simultánně jako výukový kurz pro začínající programátory a jako referenční příručka pro zkušené programátory, pro které je jazyk PHP nový. Pokud spadáte do první uvedené kategorie, měli byste asi kapitolu pročíst celou a vyzkoušet si také všechny zde uvedené příklady. Vkládání kódu PHP do webových stránek Jednou z předností PHP je, že jeho kód můžete vkládat přímo do statických stránek HTML. Aby ale kód mohl něco dělat, musí se stránka předat enginu PHP, který ji bude