tučňák
Vybrat další barevné schéma
VýchozíZelenýModrýČernýZlatý
opona
opona

google


PHP+Apache+MySQL

7996 řádků

Prostředí WWW-serveru Apache, skriptovacího jazyka PHP a databázového serveru MySQL nabízí možnost tvorby dynamických aplikací pro prostředí WWW. Všechny zmíněné produkty jsou distribuovány zdarma a lze je implementovat na různých platformám operačních systémů.

Toto řešení nenabízí jen možnost tvorby soukromých aplikací, ale díky své robustnosti, funkčnosti, stabilitě a velkému výkonu jsou vhodné pro tvorbu rozsáhlých komerčních aplikací, od portálů přes internetový obchod až po podnikové informační systémy.


Apache

Stručná charakteristika

Struktura Apache

Jak Apache pracuje?

Distribuce Apache

Instalace Apache v systémech Unix a Linux

Instalace Apache v systémech Microsoft Windows

Konfigurace Apache

Konfigurační soubory

Konfigurační soubor httpd.conf

Direktivy určené pro konfigurace serveru

Direktivy určené pro publikování dokumentů

Konfigurace typů souborů

Konfigurace přístupových práv

Nastavení přístupu konkrétním uživatelům

Konfigurace virtuálních serverů

Spuštění Apache v prostředí Unix a Linux

Ruční start Apache

Automatický start Apache

Spuštění Apache v prostředí Microsoft Windows

Start Apache jako služby

Start služby Apache z příkazové řádky

Apache Service Monitor

Ruční start Apache

Příklad vytvoření publikovatelného adresáře

PHP

Jak PHP pracuje

Interpretace PHP

Instalace a konfigurace PHP

Instalace a konfigurace v prostředí Microsoft Windows

Instalace ze spustitelného instalačního souboru

Instalace ze ZIP archívu

Instalace ze zdrojového kódu v prostředí operačních systémů Unix

Kompilace zdrojového kódu PHP, vytvoření interpretu CGI

Kompilace zdrojového kódu PHP, vytvoření modulu PHP

Konfiguraci PHP v prostředí Apache

PHP jako interpret CGI

PHP jako modul Apache

Test instalace PHP

Vlastní konfigurace PHP

Základy syntaxe a příkazy PHP

Oddělení PHP příkazů od HTML textu

Syntaxe PHP

Proměnné a konstanty

Datové typy proměnných

Zjištění datového typu proměnné

Nastavení datového typu proměnné

Proměnná typu pole

Proměnné typu objekt

Předdefinované proměnné

Konstanty

Předdefinované konstanty

Výrazy a operátory

Aritmetické operátory

Operátory přiřazení

Operátory pro binární čísla

Operátory porovnání

Operátor řízení chyb

Prováděcí operátory

Inkrementační a deinkrementační operátory

Logické operátory

Řetězcové operátory

Příkazy

Příkaz if

Příkaz while

Příkaz do…while

Příkaz for

Příkaz foreach

Příkaz break

Příkaz continue

Příkaz switch

Příkaz return

Příkazy require a include

Příkazy require_once a include_once

Uživatelem definované funkce

Platnost proměnných ve funkci

Předání parametrů do PHP skriptu

Metoda GET

Metoda POST

Session

Co je to session?

Aktivace session

Použití session v PHP skriptu

Další funkce pro session

MySQL

Instalace

Instalace překladem zdrojového kódu

Binární instalace v prostředí Microsoft Windows

Spuštění a zastavení MySQL v prostředí Unix a Linux

Start serveru MySQL z příkazové řádky

Automatický start MySQL

Spuštění a zastavení MySQL v prostředí Microsoft Windows

MySQL jako služba operačního systému

Start služby MySQL z příkazové řádky

Spuštění a ukončení MySQL z příkazové řádky

Správa databází a tabulek

Klient mysql

Ukončení práce v mysql

Správa databází

Vytvoření databáze

Zobrazení seznamu databází

Nastavení databáze

Odstranění databáze

Správa tabulek

Vytvoření tabulky

Zobrazení seznamu tabulek

Zobrazení struktury tabulky

Úprava tabulky

Odstranění tabulky

Manipulace se záznamy

Vložení nového záznam

Zobrazení záznamů v tabulce

>Úprava záznamu v tabulce

Odstranění záznamu z tabulky

PHP a MySQL

Připojení k MySQL serveru

Výběr databáze

Vykonání SQL příkazu

Zobrazení dat z SQL příkazu v PHP skriptu

Ukončení připojení k MySQL serveru

Některé další funkce pro práci s MySQL serverem

Vše v jednom příkladu


Apache

WWW-server Apache je v současnosti nejrozšířenější WWW-server, který je možné provozovat na různých platformách operačních systémů. Díky jednoduché konfiguraci a malým nárokům na operační systém se Apache provozuje nejen na serverech s operačními systémy Unix Linux, ale i na počítačích s Microsoft Windows, Novel NetWare, BeOS, Mac, OS/2,hp,Open, VMS aj. O úspěšnost Apache se můžete přesvědčit na http://www.netcraft.co.uk/Survey, kde naleznete statistické údaje o využívání WWW-serverů.

WWW-server Apache byl vyvinut na základě úspěšného WWW-serveru NCSA. V roce 1995 vznikla skupina vývojářů Apache Group, která se později změnila na Apache Software Foundation, http://www.apache.org/. Ve stejném roce přišla na svět první verze Apache. Od té doby prošel Apache úspěšným vývojem. Dnes je distribuována zatím poslední verze Apache 2.0.39.

Poznámka: Zajímavý je vznik názvu WWW-serveru. K původnímu NCSA serveru byly postupně přidávány „záplaty“ (anglickypatches), které zvyšovaly funkčnost a stabilitu serveru a daly tak i podnět k pojmenování nového serveru na Apache (z anglického a patche - záplata).

Vývoj Apache je otevřen i pro ostatní vývojáře a programátory. Máte-li zájem se zapojit do vývoje, pak navštivte http://httpd.apache.org/dev/, kde naleznete podrobné informace.

Stručná charakteristika

Charakteristiku Apache můžeme shrnou do několika bodů:

  • Jednoduchost, ale rozsáhlé možnosti konfigurace
  • Restrikce dle adresářů, domén, hesel, individuální omezení uživatelských stránek pro jednotlivé uživatele nebo skupiny uživatelů
  • Oddělení obsahu WWW-serveru od ostatních částí systému
  • Podpora virtuálních servery (i pro jednu IP adresu)
  • Integrovaná proxy
  • Bezpečná komunikace prostřednictvím SSL
  • Podpora pro spouštění externích programů (CGI skripty)
  • Možnost spouštět CGI skripty s právy jiného uživatele
  • Podpora serverem vkládané vsuvky (SSI)
  • Filtrování příchozích požadavků a odesílaných dokumentů
  • Výběr vhodného dokumentu na základě vlastností prohlížeče

Vyjmenovány jsou opravdu základní vlastnosti. Podrobnější informace naleznete na http://httpd.apache.org/docs-2.0/.

Struktura Apache

WWW-server Apache je řešen modulárně. Komponenty serveru tvoří jádro, které zajišťuje základní činnost a moduly, které rozšiřují vlastnosti WWW-serveru. Na Internetu jsou dostupné ke stažení moduly dalších výrobců softwarů, které umožňují ještě více rozšířit funkčnost.

Moduly se do WWW-serveru Apache přidávají buď při instalaci překladem zdrojového kódu, nebo dynamicky při vlastním startu Apache.

Moduly, které byly přidány v rámci instalace překladem zdrojového kódu, jsou zkompilovány spolu se zdrojovým kódem Apache a stávají se tak jeho nedílnou součástí. Zdrojový kód standardně podporovaných modulů je součástí distribuce Apache.

Dynamické moduly, označují se jako DSO (DynamicShared Object) moduly, se zavádějí pří startu Apache definováním v konfiguračním souboru httpd.conf(viz dále) pomocí direktivy LoadModule. Tyto moduly jsou součástí binární instalace, nebo je lze, pokud je k dispozici zdrojový kód Apache, kdykoliv vytvořit. Samozřejmě tyto moduly můžeme zavádět i v případě, že Apache byl nainstalován překladem zdrojového kódu.

Jak Apache pracuje?

Při startu WWW-serveru Apache se spustí proces, který označujeme jako rodičovský (parent). Tento proces je jednak zodpovědný za vlastní běh WWW-serveru a jednak za další procesy, které jsou z tohoto procesu spuštěny. Tyto procesy se označují slovem potomek (child) a jsou zodpovědné za zpracování požadavků zaslaných prohlížeči.

Apache verze 2.0 používá v prostředí operačních systémů Unix a Linux dva základní modely správy procesů. První model implementuje pouze procesy. Při startu Apache je spuštěn rodičovský proces, který spustí sadu tzv. potomků. Druhý model implementuje procesy a vlákna (threads). Opět je spuštěn hlavní proces, který rovněž spustí sadu potomků. Každý z nich pak ale vytvoří sadu vláken, které obsluhují požadavky. Tomuto modelu je blízký model implementace procesů a vláken v prostředí Win32. Zde se však vytváří pouze jeden potomek.

Poznámka: Předchozí verze Apache 1.3 používaly v prostředí Unix a Linux pouze jeden model, který implementoval pouze procesy. Model správy procesů ve Win32 odpovídá modelu v nové verzi Apache.

Protože i popis základních parametrů by překročil svým obsahem rámec této kapitoly, doporučuji prostudovat http://httpd.apache.org/docs-2.0/mpm.html, kde naleznete informace o správě procesů Apache v prostředí ostatních operačních systémů.

Distribuce Apache

Aktuální verze získáte na http://www.apache.org/dist/httpd/, kde jsou k dispozici pro volné stažení jak soubory se zdrojovým kódem, tak binární instalace pro jednotlivé operační systémy.

Instalace Apache může být i součástí distribuce operačního systému. Například operační systém RedHat Linux nabízí instalaci Apache prostřednictvím souborů rpm. Tento způsob distribuce však nemusí obsahovat poslední aktuální verzi. Výhodou je, že získáte instalaci, která byla odladěna pro konkrétní operační systém.

Instalace Apache v systémech Unix a Linux

V této části se budeme věnovat instalaci a provozování Apache v prostředí operačních systémů Unix a Linux. Pro tyto systémy jsou k dispozici dva způsoby instalace WWW-server u Apache.

Binární instalace je určena pro instalaci Apache v konkrétním operačním systému. Tato instalace je velmi jednoduchá a v jednotlivých operačních systémech se může lišit. Samotná instalace lze provést v prostředí příkazové řádky nebo pomocí grafických aplikací v prostředí

Příklad instalace v systémech, které využívají instalační soubory *.rpm, například RedHat Linux nebo SuSE Linux či Mandrake Linux:

rpm -i apache*.rpm php4*.rpm mysql*.rpm

Příklad instalace v operačním systému Debian, který používá instalační soubory *.deb:

apt-get install apache php4 mysql

Všimněte, že kromě WWW-serveru Apache lze nainstalovat více produktů. V našich příkladech jsme ukázali instalaci těch produktů, kterým se budeme v této kapitole věnovat, to je WWW-server Apache, prostředí skriptovacího jazyka PHP a databázového serveru MySQL.

Kompilace zdrojového kódu. Apache je také distribuován ve formě zdrojového kódu programovacího jazyka C. Soubory se zdrojovým kódem jsou zkomprimovány do jednoho souboru. Pro každou verzi Apache je k dispozici více souborů. Každý byl vytvořen jiným komprimačním programem. O jaký se jedná, poznáte podle přípony vytvořeného souboru.

Poznámka: V další části budeme pracovat se souborem, který má příponu .tar.gz. Tento soubor byl vytvořen pomocí archivačního programu tar a zkomprimován programem gzip. Například pro Apache verze 2.0.36 je k dispozici soubor httpd-2.0.36.tar.gz

Tento typ instalace je nezávislý na verzi operačního systému. Podmínkou je mít nainstalovaný vhodný překladač zdrojového kódu, který vytvoří binární a další potřebné soubory pro provozování Apache. Pro překlad je doporučený GNU překladač gcc, který je součástí distribuce operačních systémů Linux.

Tip: Více informací o překladači gcc, včetně instalačních souborů, naleznete na http://www.gnu.org/software/gcc/gcc.html.

Jednotlivé kroky instalace překladem zdrojového kódu:

# tar xvzf httpd-2.0.36.tar.gz
# cd httpd-2.0.36
# ./configure –-prefix=/usr/local/Apache –-enable-so
# make
# make install

Zkomprimovaný soubor zkopírujeme do pracovního adresáře, například /tmp, a rozbalíme pomocí příkazu tar. Vytvoří se adresář httpd-2.0.36, do kterého vstoupíme příkazem cd. Jako první spustíme v tomto adresáři uložený skript configure, který provede kontrolu prostředí operačního systému a vytvoří soubory Makefile, které obsahují informace pro následující překlad.

Poznámka: Skript configure lze spustit s řadou dalších parametrů. Seznam všech parametrů získáte spuštěním skriptu s parametrem –-help. My jsme použili parametry –-prefix, kterými jsme určily adresář, do kterého se Apache nainstaluje, a parametr –-enable-so, kterým umožníme Apache dynamicky se rozšiřovat o DSO moduly.
Nezadáme-li parametr –-prefix, bude se Apache instalovat do implicitního adresáře /usr/local. V případě přidání dalších modulů, které budou zkompilovány společně s Apache, přepínače a enable-jméno_modulu:, například –-enable-proxy

Po provedení konfiguračního skriptu spustíme příkazy make a make install, které provedenou vlastní překlad zdrojového kódu a zkopírování vytvořených souborů do cílového adresáře.

Tímto posledním bodem jsme instalaci Apache ukončili. Dalším krokem bude konfigurace a první spuštění, ale tyto kroky si popíšeme v další části této kapitoly.

Instalace Apache v systémech Microsoft Windows

Pro provozování WWW-serveru Apache je doporučen operační systém MS Windows NT 4.0, respektive MS Windows 2000. Pokud se rozhodnete provozovat Apache v Microsoft Windows 95, musíte aktualizovat knihovnu Windows Socket (WinSock) na verzi 2. V případě instalace Apache pomocí .msi souborů, musíte navíc v Microsoft Windows 95, 98 a NT nainstalovat aplikaci Microsoft Windows Installer. Odkazy na požadované programové vybavení naleznete na stránkách s binární distribucí Apache http://www.apache.org/dist/httpd/binaries/win32/.

Opět jsou k dispozici dva způsoby instalace.

Kompilace zdrojového kódu je opět podmíněna vhodným překladačem. Doporučeným je Microsoft Visual C++ 5.0 a vyšší. Protože jsme se touto instalaci podrobněji zabývali v předchozí části, budeme se věnovat binární instalaci.

Binární instalace se v případě operačních systému Microsoft Windows používá nejčastěji. Instalační soubory jsou k dispozici na http://www.apache.org/dist/httpd/binaries/win32/, a jsou určeny pouze pro počítače s procesory Intel. Pro verzi Apache 2.0 jsou k dispozici jak soubory .msi, tedy pro instalaci pomocí aplikace Microsoft Windows Installer, tak samospustitelné instalační soubory .exe. Stejná situace je i v případě starší verze Apache 1.3.

Instalace Apache v Microsoft Windows je jednoduchá. Po stažení a spuštění instalačního souboru, například apache_2.0.36-win32-x86-no_ssl.msi, se zobrazí úvodní okno průvodce instalací. Ten bude postupně zobrazovat další okna. Jako první se zobrazí s licenčním ujednáním a s popisem produktu. Následuje okno s formulářem, ve kterém vyplníte jméno domény vašeho počítače, jméno počítače a e-mailovou adresu správce WWW-serveru a zvolíte, zda chcete Apache spouštět jako službu (pouze ve Windows NT a 2000) nebo ručně. Dalším krokem je pak volba kompletní nebo volitelné instalace. Implicitním adresářem pro instalaci je C:\Program\Apache Group\Apache2.

Instalační proces je ukončen zkopírováním souborů do cílového adresáře a registrací software v operačním systému MS Windows.

Konfigurace Apache

Adresář s instalací Apache je rozdělen do několika podadresářů. Nejdůležitější jsou:

  • bin – obsahuje programy pro běh WWW-serveru Apache
  • htdocs – kořenový adresář s publikovatelnými dokumenty
  • conf – adresář s konfiguračními soubory
  • logs – adresář se soubory, které obsahují informace o činnosti WWW-serveru
  • cgi-bin – adresář pro externí spustitelné soubory (CGI skripty)
  • modules – adresář s moduly, které lze aktivovat při startu WWW-serveru

Konfigurační soubory

Apache verze 2.0 používá tyto konfigurační soubory:

  • httpd.conf – hlavní konfigurační soubor serveru (základní nastavení)
  • mime.types – popis podporovaných typů dokumentů (MIME typ) a jim odpovídajících přípon souborů
  • magic – soubor, který obsahuje vzorky dokumentů. Tyto vzorky se použijí pro rozpoznání typu souboru v případě, kdy nelze podle jinak zjistit MIME typ souboru.
  • .htaccess – tento konfigurační soubor je uložen v jakémkoli adresáři, který obsahuje publikovatelné dokumenty. Nastavuje vlastnosti adresáře. Jeho direktivy, které jsou totožné s direktivami v httpd.conf. Pokud je použití .htaccess povoleno, je upřednostňován před stejnými direktivami v hlavním konfiguračním souboru.

Starší verze Apache 1.2 a 1.3 navíc využívaly pro konfiguraci tyto soubory:

  • access.conf – nastavení oprávnění pro servery, uživatele, CGI skripty, dokumenty atd. Nyní je součástí hlavního konfiguračního souboru httpd.conf
  • srm.conf – soubor popisující obsah serveru. Nyní je součástí hlavního konfiguračního souboru httpd.conf

Konfigurační soubor httpd.conf

Konfigurace Apache je stejná pro všechny platformy operačních systémů. Spočívá v editaci konfiguračního souboru httpd.conf adresáři conf, který je umístěn v instalačním adresáři Apache. Konfigurační soubor httpd.conf obsahuje direktivy, které se zapisují na samostatné řádky. Pro komentář nebo pro vypnutí direktivy se používá znak #.

Soubor httpd.conf je rozdělen do tří části. V první se nastavují vlastnosti serveru, ve druhé je hlavní část konfigurace a ve třetí se nastavují virtuální hostitelé. Tyto sekce slouží pro zpřehlednění a sami zjistíte, že jednotlivé direktivy nemusí být vázány na tyto sekce.

Nyní si popíšeme základní direktivy, které budeme pro začátek potřebovat.

Direktivy určené pro konfigurace serveru

  • ServerRoot – Kořenový adresář, do kterého byl Apache nainstalován.
  • ServerName – jméno WWW-serveru.
  • Listen – Komunikační port protokolu TCP/IP, na kterém Apache naslouchá požadavky od prohlížečů. Implicitní hodnota je 80. V případě nastavení virtuálních hostitelů lze nastavit více těchto direktiv. Pro rozlišení se přidá IP adresa.
  • PidFile – Souboru, který obsahuje jednoznačnou identifikaci procesu Apache (PID). Tato hodnota slouží v systémem Unix a Linux pro zastavení či opětovné nastartování serveru.
  • ServerAdmin – Adresa elektronické pošty správce serveru
  • LoadModule – Aktivace DSO modulu
  • ErrorLog – Jméno logovacího souboru s hlášením o chybách WWW-serveru. Implicitně je umístěn v adresáři logs
  • CustomLog – Jméno správcem nastaveného logovacího souboru. Formát zpráv ukládaných do tohoto souboru se nastaví v direktivě LogFormat. Implicitně je umístěn v adresáři logs
  • LogFormat – Formát ukládaných zpráv do logovacích souborů
  • ErrorDocument – Jméno soubor s chybovým textem pro chybový kód

Direktivy určené pro publikování dokumentů

  • DocumentRoot – Specifikuje vrchol stromu dokumentů, standardně adresář htdocs
  • DirectoryIndex – Jméno výchozího souboru v adresáři s dokumenty. Při zadání URL adresy, která bude odkazovat pouze na tento adresář, se tento soubor automaticky zobrazí. Standardně se používají soubory index.html
  • <Directory> – Nastavení vlastností fyzického adresáře. Obsahuje direktivy, které se vztahují k danému fyzickému adresáři
  • <Location> – Obdoba <Directory> není však vztažena na konkrétní adresář, ale na URL adresu
  • <Files> – Nastavení vlastností souborů
  • Options – Nastavení vlastností v daném adresáři. Jednotlivé volby se mohou kombinovat, přičemž vyhodnocování vlastností probíhá z leva do prava:
    • All – Povoluje všechny vlastnosti (mimo vlastnosti MultiViews)
    • None – Zakazuje vše.
    • ExecCGI – Povoluje provádění CGI skriptů
    • Includes – Povoluje používat serverem vkládané vsuvky (SSI)
    • IncludesNOEXEC – Totéž co předchozí, ale je zakázáno používat SSI direktivy #exec a #include, které se odkazují na CGI skripty
    • FollowSymLinks – Povoluje používat symbolické odkazy
    • SymLinksIfOwnerMatch – Totéž co předchozí volba, avšak vlastník odkazu i vlastník cílového souboru či adresáře musí být tentýž uživatel
    • Indexes – Nenachází-li se v daném adresáři výchozí dokument, který je definován v direktivě DirectoryIndex, je zobrazen obsah tohoto adresáře
    • MultiViews – Nastavení kódování na základě komunikace prohlížeče s WWW-serverem
  • AllowOverride – Specifikuje typy direktiv, které mohou být změněny direktivami souboru .htaccess. Volby jsou následující:
    • All – Lokální konfigurace překryje globální
    • None – Lokální konfigurace jsou ignorovány
    • AuthConfig – Lze nastavit individuální přístupová práva uživatelů
    • FileInfo – Lze definovat charakteristiky souborů (kódování, jazyk, MIME typ)
  • Alias – Vystavení dokumentů z jiného adresáře než DocumentRoot.
  • ScriptAlias – Stejný význam jako předchozí, ale týká se umístění spustitelných souborů (CGI skriptů)
  • UserDir – Určuje jméno uživatelského adresáře, ve kterém může každý uživatel operačního systému mít uložené své vlastní stránky. Jedná se o podadresář, který je vytvořen v domovském adresáři uživatele, například public_html.
  • Redirect – Přesměrování, v případě, že dané dokumenty byl přesunuty na jiný server

Konfigurace typů souborů

  • DefaultType – implicitní MIME typ souboru, který server použije v případě, že nerozpozná typ souboru v požadavku. Výchozí hodnotou je obyčejný textový soubor, tedy MIME typ text/plain
  • AddType – Definuje explicitně MIME typ souboru podle jeho přípony
  • AddLanguage – Definuje příponu souboru použitou k rozlišení jazyka
  • AddEncoding – Definuje příponu souboru použitou pro různé druhy kódování (šifrovací software, kompresní programy ap.), například: x-gzip, x-compress
  • LanguagePriority – Definuje pořadí jazyků, které jsou upřednostňovány

Konfigurace přístupových práv

  • Deny – Zákaz přístupu pro uvedené počítače. Může se zadat jméno počítače, IP adresa (i neúplná) nebo jméno domény (i neúplné
  • Allow – Povolení pro uvedené počítače. Opět se může zadat jméno počítače, IP adresa (i neúplná) nebo jméno domény (i neúplné)
  • Další parametry pro Allow a Deny:
    • all – Povolení přístupu všem
    • none – Zákaz přístupu všem
  • Order – Definuje pořadí platnosti direktiv Deny, Allow a Matual-failure (povolení přístupu klientům, kteří jsou uvedeni v Allow a nejsou uvedeni v Deny)
  • <Limit> – Nastavení omezení pro konkrétní metodu protokolu HTTP
    • GET
    • – Přenos dat, informace se přenáší jako součást URL za znakem ?, parametry se oddělují znakem &
    • POST – Přenos dat, pro předávání parametrů je použit nezávislý přenos, například z HTML formuláře
    • PUT – Přenos informací na server
    • DELETE – Zrušení informací na serveru

Nastavení přístupu konkrétním uživatelům

Přístup konkrétních uživatelů lze vymezit následující direktivou:

  • Require – Specifikuje, který uživatel má povolený přístup. Přístup je ověřen zadáním odpovídajícího jména uživatele a správného hesla. Jména uživatelů a jejich hesel, stejně tak jména skupin uživatelů, jsou uloženy ve zvláštních souborech (viz dále). Hodnoty direktivy Require jsou následující:
    • User – Pouze uvedení uživatelé smějí využívat informace. Seznam uživatelů se odděluje mezerami
    • Group – Jen uvedené skupiny uživatelů smějí využívat informace. Seznam skupin se opět odděluje mezerami
    • Valid-user – Přístup je povolen libovolnému uživateli, který je registrován v souboru hesel
  • AuthType – Určuje typ autorizace. Výchozím typem je Basic
  • AuthName – Text vložený za tuto direktivu se zobrazí uživateli současně s výzvou k zadání jména a hesla
  • AuthUserFile – Definuje soubor s hesly pro konkrétní uživatele. Jméno souboru se udává absolutní cestou
  • AuthGroupFile – Definuje soubor skupin uživatelů. Jméno souboru se udává absolutní cestou

Soubor se jmény a hesly uživatelů vytváří a spravuje program htpasswd. Informace v souboru hesel jsou uloženy ve tvaru jméno:heslo, heslo se generuje pomocí programu htpasswd. Definice uživatelů ve skupinách se zapisuje do samostatného souboru ve tvaru skupina:uživatelé, kde uživatelé je seznam uživatelů ze souboru hesel oddělených mezerami. Všechny tyto soubory by měly být uloženy mimo obvyklý adresářový strom dokumentů.

Program htpasswd, který je uložen v adresáři bin, který je podadresářem adresáře s instalací Apache. Základní syntaxe je:

htpasswd [-cmdpsn] soubor_s_hesly jméno_uživatele

Parametry htpasswd příkazu jsou:

Parametr

Popis

-c

Vytvoření souboru s hesly. Použijte pouze při prvním vytvoření souboru, jinak dojde k přepsání existujícího souboru.

-m

Kryptování hesla pomocí MD5 (implicitní v prostředí Microsoft Windows )

-d

Kryptování hesla pomocí CRYPT (implicitní v prostředí Unix a Linux)

-p

Heslo bude uloženo jako obyčejný text

-s

Kryptování hesla pomocí SHA

-n

Změny nebudou uloženy, pouze zobrazeny.


Tabulka: Parametry příkazu htpasswd

Ukázka vytvoření souboru /etc/passwd.apache a vložení uživatele karel:

# htpasswd -c /etc/passwd.apache karel
New password:
Re-type new password:
Adding password for user karel

Příklad zabezpečení adresáře C:/phpmyadmin/, který je zpřístupněn z prostředí WWW jako http://localhost/phpadmin/:

Alias phpadmin "C:/phpmyadmin/"
<Directory "C:/phpmyadmin/">
Options MultiViews
AllowOverride None
AuthType Basic
AuthName "Administrace databází"
AuthUserFile "/etc/passwd.apache"
Require User karel
Order allow,deny
Allow from all
</Directory>

V tomto příkladu se smí připojit pouze uživatel posmura. Přístup tohoto uživatele bude ověřen zadáním hesla. Ostatní uživatelé budou odmítnuti.

Konfigurace virtuálních serverů

WWW-server Apache umožňuje konfiguraci více virtuálních WWW-serverů. Virtuální servery můžete vytvářet jak na počítačích s více síťovými rozhraními, která mají vlastní IP adresy, tak na počítači s jediným síťovým rozhraním, které má přiděleno více IP adres. Jméno virtuálního serveru musí být definováno v DNS.

Příklad:

# Definice jména IP adresy virtuálního serveru
NameVirtualHost 232.111.222.111

# Definice virtuálního serveru
<VirtualHost 232.111.222.111>
ServerAdmin webmaster@karel.server.cz
DocumenRoot /home/web/karel
ServerName karel.server.cz
ErrorLog /var/logs/ karel.server.cz.error_log
TransferLog /logs/ karel.server.cz.transfer_log
</Virtual>

Více informací naleznete na http://httpd.apache.org/docs-2.0/vhosts/.

Spuštění Apache v prostředí Unix a Linux

Ruční start Apache

Po instalaci Apache překladem zdrojového kódu se pro spuštění nebo ukončení používá skript apachectl, který je uložen v podadresáři bin adresáře WWW-serveru Apache.

Parametry skriptu apachectl:

Parametr

Popis

start

Start WWW-serveru Apache.

startssl

Start WWW-serveru Apache s podporou bezpečné komunikace SSL. SSL musí být součásti instalace Apache.

stop

Zastavení WWW-serveru Apache.

restart

Zastavení a opětovný start Apache. Procesy budou ukončeny bez ohledu na skutečnost, zda právě obsluhují požadavek

graceful

Zastavení a opětovný start Apache. Procesy, které obsluhují požadavky, budou ukončeny až po jejich obsloužení.

status

Zobrazení informace o stavu Apache.

fullstatus

Zobrazení úplné informace o stavu Apache.

help

Zobrazení nápovědy


Tabulka: Parametry příkazu apachectl

Příklad:

# /usr/local/apache/bin/apachectl start

Tento příkaz provede start WWW-serveru Apache.

Poznámka: V případě binární instalace Apache, která je součástí distribuce operačního systému Linux, se WWW-server Apache spouští pomocí skriptu apache, který je uložen v adresáři operačního systému /init.d. Tento adresář je podadresářem adresáře /etc, respektive /etc/rc.d (závisí na distribuci operačního systému). Syntaxe je následující:

apache start|stop|reload|reload modules |force reload |restart

Automatický start Apache

Pokud chcete WWW-server Apache spustit automaticky při startu operačního systému, pak musíte do adresáře se skripty potřebnými pro běh konkrétní úrovně operačního systému Unix/Linux přidat vlastní startovací soubor, například S90apache. Je nutné dodržovat několik pravidel pro označování těchto souborů:,/p>

  • soubory musí začínat písmenem S pro start v dané úrovni nebo K, pro ukončení (kill)
  • číslo, které určí pořadí vykonávání
  • krátký název, který charakterizuje účel skriptu

Je-li pro start operačního systému nastavena úroveň 3 (normální režim systému v síti), pak vytvoříte startovací skript /etc/rc.d/rc3.d/S90apache. Pro automatické ukončení , například pro úrovně 0 (zastavení systému) nebo 6 (restart systému) vytvořte ukončovací skripty /etc/rc.d/rc0.d/K01apache respektive /etc/rc.d/rc6.d/K01apache.

Vytvoření těchto skriptů je velice jednoduché, pomocí symbolického linku (odkazu) na soubor apachectl:

# ln –s /usr/local/apache2/bin/apachectl
/etc/rc.d/rc3.d/S90apache

# ln –s /usr/local/apache2/bin/apachectl
/etc/rc.d/rc0.d/K01apache

# ln –s /usr/local/apache2/bin/apachectl
/etc/rc.d/rc6.d/K01apache

Poznámka: V případě binární instalace Apache provede vytvoření těchto skriptů instalační program.

Spuštění Apache v prostředí Microsoft Windows

Start Apache jako služby

V prostředí operačních systémů MS Windows NT a Windows 2000 je možné spouštět Apache jako službu operačního systému. Nastavení, zda se má služba Apache spouštět automaticky při startu operačního systému nebo ručně, popřípadě pozastavení a opětovné spuštění služby, provedete standardním způsobem, například ve Windows 2000: Start\Nastavení\Ovládací panely\Nástroje pro správu\Služby. Další možností správy služby je pomocí nabídky Start\Programy\Apache HTTP Server 2.0\Control Apache Server, kde je k dispozici volby Restart, Start a Stop služby Apache.

Start služby Apache z příkazové řádky

Jste-li zastánci příkazové řádky, pak pro řízení služby použijte binární soubor apache.exe, který uložen v podadresáři bin adresáře s instalací WWW-serveru Apache, nebo můžete použít příkaz operačního systému NET.

Parametry binárního souboru apache.exe:

Parametr

Popis

-n jméno_služby

Jméno služby, například apache2

-k start

Start WWW-serveru Apache

-k stop

Zastavení WWW-serveru Apache.

-k restart

Zastavení a opětovný start Apache.


Tabulka: Parametry souboru apache.exe

Příklad:

C:\Program Files\Apache Group\Apache2\bin>apache -n apache2 -k start
Starting the Apache2 service
The Apache2 service is running.

Parametry příkazu net:

Parametr

Popis

net start jméno_služby

Start WWW-serveru Apache

net stop jméno_služby

Zastavení WWW-serveru Apache.


Tabulka: Parametry příkazu NET

Příklad:

C:\>net start Apache
Služba Apache je spouštěna.
Služba Apache byla úspěšně spuštěna.

Apache Service Monitor

Verze Apache 2.0 obsahuje jednoduchou aplikaci Apache Service Monitor, ze které lze spouštět, restartovat a zastavovat běh Apache, a to jak na lokálním, tak vzdáleném počítači. Zástupce monitoru je součástí nabídky Start\Programy\Apache HTTP Server 2.0\Control Apache Server. Po jeho spuštění se na hlavním panelu zobrazí ikona. Pokud jste Apache instalovali jako službu, bude se monitor spouštět automaticky při startu operačního systému.

Při jednom klepnutí myší na tuto ikonku se zobrazí nabídky všech služeb Apache a po vybrání konkrétní služby příkazy pro spuštění, restart a vypnutí. Po klepnutím levým tlačítkem, nebo po dvojitém klepnutí, se zobrazí okno Apache Service Monitor. V tomto okně je možné, kromě řízení běhu Apache, se připojit k jinému počítači nebo spustit modul Služby.

Ruční start Apache

Ve všech operačních systémech Microsoft lze spouštět WWW-server Apache ručně, pomocí již zmíněného souboru apache.exe:

C:\Program Files\Apache Group\Apache2\bin>apache.exe

Tento příkaz spustí WWW-server Apache.

Přejete-li si přerušit běh Apache, stiskněte klávesy Ctrl-C.

C:\Program Files\Apache Group\Apache2\bin>Apache.exe
Ctrl-C
Apache server interrupted...

C:\Program Files\Apache Group\Apache2\bin>

Zavřením okna příkazového řádku se Apache ukončí

C:\Program Files\Apache Group\Apache2\bin>apache
Apache server shutdown initiated...

Příklad vytvoření publikovatelného adresáře

Na závěr této části, kde jsme se věnovali problematice WWW-serveru Apache, si vytvoříme publikovatelný adresář knihovna. V tomto adresáři pak budeme vytvářet náš první PHP skript, který později propojíme s databázovým servere, MySQL. Vše si ukážeme v prostředí operačního systému Microsoft Windows. V prostředí operačních systémů Unix a Linux budeme postupovat stejně, to znamená budeme upravovat konfigurační soubor WWW-serveru httpd.conf.

Fyzický adresář, ve kterém budou uloženy HTML dokumenty a PHP skripty, je C:\Www\Knihy.

<Directory "C:/Www/Knihy/">
Options Indexes
DirectoryIndex default.htm
Order Deny,Allow
Deny from None
Allow from All
</Directory>

Poznámka: I v případě operačních systému Microsoft Windows se jako symbol adresáře používá znak lomítko /.

Adresář má nastavenou jedinou vlastnost Indexes, která v případě absence výchozího souboru, zobrazí obsah tohoto adresáře. Výchozím souborem je soubor default.htm. Do adresáře mají přístup všichni uživatelé ze všech počítačů.

Aby tento adresář byl dostupný z prostředí WWW, musíme použít direktivu Alias, která fyzickému adresáři přidělí další jméno, které pak bude součástí požadované URL adresy.

Alias /knihovna "C:/Www/Knihy/"

Po úpravě konfiguračního souboru httpd.conf musíme WWW-server Apache restartovat. Nyní si můžeme vše otestovat. Námi vytvořený adresář bude dostupný jako http://localhost/knihovna/.

Obrázek Odkaz na testovací aplikaci

Tím jsme dokončili povídání o WWW-serveru Apache a nyní se můžeme pustit do problematiky skriptovacího jazyka PHP.

PHP

Apache a PHP (PHP Hypertext Preprocesor) patří neodmyslitelně k sobě. Spolu vytváří prostředí, které, díky ceně a nízkým nárokům na hardware, umožňuje vývoj rozsáhlých aplikací pro prostředí WWW. Protože je možné provozovat oba produkty na různých platformách operačních systémů, je snadné vytvořenou aplikaci implementovat jak v prostředí Microsoft Windows, tak na serverech například s operačním systémem Mandrake Linux.

Vlastnosti PHP:

  • PHP je skriptovací jazyk, který je zabudován na straně serveru a je optimalizován pro prostředí WWW
  • Skriptovací jazyk PHP se provádí uvnitř HTML dokumentu
  • PHP je podporováno na velkém množství operačních systémů, od systémů Unix po operační systémy Microsoft Windows
  • PHP nabízí podporu pro více WWW-serverů. Vedle Apache podporuje například Microsoft Internet IIS, servery Netscape a další
  • PHP pracuje s objekty, které jsou buď součástí počítače, na kterém běží WWW-server, nebo mohou být i na vzdálených počítačích. Mezi tyto objekty patří například databáze nebo soubory
  • PHP podporuje propojení s velkým množstvím databází, například Informix, MySQL, Oracle, PostgreSQL, Sybase nebo Microsoft SQL Server. Pro ostatní databáze používá rozhraní ODBC
  • Dále PHP podporuje protokoly pro elektronickou poštu IMAP (Internet Mail Access Protocol) a SMTP (Simple Mail Transfer protocol), protokol LDAP (Light-weight Directory Access Protocol), jazyk XML (Extensible Markup Language), podporuje práci s obrázky, umožňuje pracovat s dokumenty PDF (Portable Document Format) a PostScript atd

Kompletní seznam všech vlastností naleznete v originální dokumentaci na http://www.php.net/docs.php.

Jak PHP pracuje

Provedení PHP skriptu zabezpečuje WWW-server. Po přijetí požadavku od prohlížeče na dokument se skriptem, neodešle WWW-server tento dokument zpět prohlížeči, ale předá ho na zpracování interpretu PHP. Výsledkem zpracování bude vygenerovaný dokument, který bude obsahovat pouze HTML kód. Ten je interpretem předán zpět WWW-serveru, který jej odešle prohlížeči.

Interpret, který zpracovává zdrojový kód, je buď součástí WWW-serveru nebo může být reprezentován externím programem. Umístění interpretu je závislé na způsobu instalace. Následující obrázek zobrazuje zpracování skriptu skript.php, který je uložen v adresáři /home/www, externím interpretem /usr/local/php/bin/php.

Činnost PHP si názorněji přiblížíme na následujícím příkladu. Vytvoříme si jednoduchý PHP skript, který nám bude v další části této kapitoly sloužit pro zobrazení dat z databáze MySQL. Skript si pojmenujeme knihovna.php.

Příklad:

<HTML>
<HEAD>
<TITLE>Knihovna</TITLE>
</HEAD>

<BODY>
<h1>Knihovna</h1>
<h2>Seznam knih</h2>
<?
echo "Zde bude zobrazen seznam knih, které jsou uloženy<br>";
echo "v databázi MySQL.";
?>
</BODY>

</HTML>

Kód PHP je oddělen od ostatního textu značkami <? a ?>. Apache předá tento skript na zpracování interpretu PHP, který zpracuje příkazy mezi značkami <? a ?>. Ostatní text ponechá bez povšimnutí.V našem případe tedy pouze vykonají příkazy echo, které vypíší výrazy uvedený v uvozovkách. Vygenerovaný HTML dokument předá interpret zpět WWW-serveru Apache a ten jej odešle prohlížeči.

Prohlížeč, který odeslal požadavek http://localhost/knihovna.php na WWW-server Apache, obdrží vygenerovaný HTML dokumentu, který obsahuje pouze text a prvky jazyka HTML.

Zobrazení zdrojového kódu, který obdržel prohlížeč:

<HTML>
<HEAD>
<TITLE>Knihovna</TITLE>
</HEAD>

<BODY>
<h1>Knihovna</h1>
<h2>Seznam knih</h2>
Zde bude zobrazen seznam knih, které jsou uloženy<br>v databázi MySQL.
</BODY>

</HTML>

V této jednoduché ukázce jsme si dokázali, že výsledný zdrojový kód opravdu obsahuje pouze text a značky jazyka HTML.

Interpretace PHP

PHP může být v prostředí Apache nastavené jako modul nebo jako interpret CGI.

PHP jako modul Apache. Nastavit PHP jako modul Apache je možné jak v prostředí Microsoft Windows, tak v prostředí operačních systémů Unix. Toto řešení poskytuje podstatně vyšší výkon než interpret CGI.

PHP jako interpret CGI. Interpret PHP se spouští pro každý příchozí požadavek jako externí program. Toto řešení je vhodné, chcete-li umožnit spouštět PHP skripty pod jiným uživatelem než pod kterým běží Apache.

Instalace a konfigurace PHP

Instalační soubory jsou k dispozici k volnému stažení z http://www.php.net/. Podobně jako v případě Apache si můžete si vybrat ze dvou typů instalace.

Soubory s binární instalací jsou distribuovány pouze pro operační systémy Microsoft Windows a jsou nabízeny ve dvou verzích:

  • Spustitelný instalační soubor (.exe) je spíše určen pro začátečníky. Obsahuje pouze základní vlastnosti: CGI interpret PHP a vestavěnou podporu pro databázi MySQL a rozhraní ODBC. Neobsahuje žádná další rozšíření
  • Archív ZIP (.zip) naopak obsahuje kompletní instalaci PHP. Samotná instalace spočívá pouze v rozbalení archívu do adresářové struktury počítače

Soubory se zdrojovým kódem jsou určeny pro instalaci překladem zdrojového kódu. Postup instalace je obdobný jako v případě Apache.

Poznámka: Samozřejmě, že instalace PHP jsou i součástí distribuce operačního systému. Postup instalace jsme si stručně popsali v části věnované WWW-serveru Apache.

Instalace a konfigurace v prostředí Microsoft Windows

V této části si popíšeme binární instalaci PHP v prostředí Microsoft Windows. Jak jsme si již řekli, k dispozici jsou dvě verze instalačních souborů: spustitelný instalační soubor (.exe) a archív ve formátu ZIP. Obě instalace jsou velmi jednoduché. V prvním případě nás instalační program provede celou instalací, ve druhém stačí rozbalit archív pomocí vhodného nástroje.

Instalace ze spustitelného instalačního souboru

Prvním krokem je spustit instalační soubor. V našem případě se jedná o soubor php-4.2.0-installer.exe>. Po spuštění tohoto souboru se zobrazí okno s průvodcem instalace. Který nás jednoduše provede celou instalací. Cílovým adresářem je standardně C:\php.

Instalace ze ZIP archívu

Nejjednodušší ze všech instalací. Soubor s archívem, například php-4.2.0-Win32.zip, stačí pouze pomocí vhodného nástroje, například WinZip, rozbalit na disk počítače.

Instalace ze zdrojového kódu v prostředí operačních systémů Unix

Existuje několik způsobů jak nainstalovat PHP v prostředí operačních systémů Unix:

  • Kompilace zdrojového PHP, kdy bude vytvořen interpret CGI
  • Kompilace zdrojového PHP, kdy bude vytvořen modul, který se bude dynamicky nahrávat při startu Apache

Kompilace zdrojového kódu PHP, vytvoření interpretu CGI

Tento typ instalace nainstaluje PHP do adresáře, který je zadán při spuštění konfiguračního skriptu. Postup instalace je následující:

# tar -xzvf php-4.2.0.tar.gz
# cd php-4.2.0
# ./configure –-prefix=/usr/local/php
# make
# make install

Prvním krokem je rozbalení souborů s archívem zdrojového kódu PHP. Přepneme se do adresáře se zdrojovým kódem a provedeme úplný překlad zdrojového kódu PHP. Instalace PHP opět začíná spuštěním konfiguračního skriptu configure. V našem případě jsme nastavili cílový adresář /usr/local/php, do kterého bude PHP instalovat. Konfigurační skript provede kontrolu prostředí a vytvoří sadu souborů Makefile, které jsou určeny pro další část instalace. Tak pak pokračuje spuštěním příkazu make a make install, které provedou překlad a instalaci zdrojového kódu.

Interpret CGI, binární soubor php, bude umístěn v adresáři /usr/local/php/bin.

Následuje konfigurace PHP, která bude popsána dále.

Kompilace zdrojového kódu PHP, vytvoření modulu PHP

Tato instalaci vytvoří dynamický (DSO) modul Apache libphp4.so, který se bude aktivovat při startu WWW-serveru Apache. Modul vytvoří utilita apxs, která je součástí instalace Apache a je uložena v podadresáři bin kořenového adresáře Apache.

Prvním krokem je, stejně jako v předchozích případech, rozbalení souborů s archívem zdrojového kódu PHP.

# tar -xzvf php-4.2.0.tar.gz
# cd php-4.2.0
#./configure --with-apxs=/usr/local/apache/bin/apxs
# make
# make install

Přepneme se do adresáře se zdrojovým kódem a provedeme úplný překlad zdrojového kódu PHP. Instalace PHP opět začíná spuštěním konfiguračního skriptu configure. s parametrem --with-apxs (pro verzi Apache 2.0 --with-apxs2), který nastavuje cestu k utilitě apxs. Konfigurační skript provede kontrolu prostředí a vytvoří sadu souborů Makefile. Instalace pak pokračuje spuštěním příkazu make a make install, které provedou překlad a instalaci vytvořených souborů.

Vytvořený modul libphp4.so bude uložen do podadresáře modules kořenového adresáře Apache.

Konfiguraci PHP v prostředí Apache

PHP jako interpret CGI

Interpretem, který bude provádět PHP skripty, je binární soubor php (v prostředí operačních systémů Unix) nebo php.exe (v prostředí Microsoft Windows). Z pohledu Apache se jedná o běžný CGI skript, to znamená externí program.

Prvním krokem je vytvoření virtuálního adresáře s CGI skripty:

ScriptAlias /php/ "c:/php/"

Druhým krokem je nastavení MIME typu pro soubory se skripty. Ty mají standardně příponu .php:

AddType application/x-httpd-php .php

Třetím a posledním krokem je přiřazení akce PHP skriptu:

Action application/x-httpd-php "/php/php.exe"

PHP jako modul Apache

Tato konfigurace je určena pro PHP, které běží jako modul Apache.

Poznámka: Nezapomeňte, že musí být v Apache zkompilován modul mod_so.

Modul zavedeme v konfiguračním souboru Apache httpd.conf pomocí direktivy LoadModule. V binární instalaci v Microsoft Windows ke soubor s modulem PHP pro Apache umístěn v podadresáři sapi kořenového adresáře PHP.

LoadModule php4_module c:/php/sapi/php4apache.dll

V případě instalace PHP kompilací (viz výše) bude modul uložen v podadresáři modules/ kořenového adresáře Apache:

LoadModule php4_module modules/libphp4.so

Nyní nastavíme MIME typ pro soubory se skripty. Ty mají standardně příponu .php:

AddType application/x-httpd-php .php

Test instalace PHP

Na závěr otestujeme úspěšnost instalace. Test není vůbec složitý. Stačí vytvořit jednoduchý PHP skript a tento skript spustit. Jako příklad nám poslouží skript, který si nazveme například testphp.php. Skript si uložíme do našeho, již vytvořeného, adresáře C:\Www\knihy. Tento skript obsahuje jedinou funkci phpinfo(), která přehledně zobrazí informaci o PHP. Zdrojový kód skriptu testphp.php je:

<HTML>

<HEAD>
<TITLE>Test PHP </TITLE>
</HEAD>

<BODY>
<? phpinfo();?>
</BODY>

</HTML>

Odpovědí na požadavek http://localhost/knihovna/testphp.php bude vygenerovaný HTML dokument:

Vlastní konfigurace PHP

Vlastnosti PHP se nastavují v konfiguračním souboru php.ini. Umístění souboru závisí na jak na typu instalace, tak na platformě operačního systému.

Poznámka: Konfigurační soubor je v případě většiny instalací umístěn v instalačním adresáři a do konkrétního adresáře se musí ručně zkopírovat. Doporučuji přečíst soubor install.txt, respektive INSTALL, který je součástí instalace PHP. Tento textový soubor obsahuje popis instalace a umístění konfiguračního souboru.

V prostředí operačních systému Microsoft Windows je soubor php.ini umístěn v systémovém adresáři, standardně c:\winnt.
V prostředí operačních systémů Unix je doporučeno uložit konfigurační soubor do adresáře /usr/local/lib.

Kdy a jak se soubor načítá, závisí na typu instalace. Je-li PHP nainstalováno jako modul Apache, je soubor php.ini načten při startu Apache. Je-li PHP nainstalován jako interpret CGI, je soubor php.ini načítán při každém provádění PHP skriptu.

Konfigurační soubor je rozdělen do několika sekcí:

  • Obecná konfigurace
  • Nastavení databází
  • Nastavení elektronické pošty
  • Ostatní konfigurace

Část výpisu konfiguračního souboru php.ini, která zobrazuje nastavení oddělovacích značek PHP od ostatního HTML textu:

;;;;;;;;;;;;;;;;;;;;
; Language Options ;
;;;;;;;;;;;;;;;;;;;;

; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
short_open_tag = On

; Allow ASP-style <% %> tags.
asp_tags = Off

Pro vložení poznámky nebo potlačení direktivy se používá středník (;). Komentář nemusí být uveden jen na samostatné řádce, ale i na stejné řádce za nastavením direktivy.

Pro první seznámení s PHP můžeme popis konfiguračního souboru ukončit. Po instalaci není nutné tento soubor upravovat.

Základy syntaxe a příkazy PHP

Oddělení PHP příkazů od HTML textu

Příkazy a funkce PHP se od textu HTML oddělují značky. Nastavení značek se provádí v konfiguračním souboru php.ini. Standardními značkami jsou takzvané krátké značky (short tag) <? a ?>. Vedle těchto značek můžete používat i značky <?php a ?>nebo <SCRIPT LANGUAGE=˝php˝> a </SCRIPT>.

Příklady:

<?php phpinfo(); ?>

<SCRIPT LANGUAGE=˝php˝>
phpinfo();
<SCRIPT>

Některé HTML editory tyto značky nemusí podporovat a při editaci HTML souboru s PHP skriptem je mohou nahradit HTML symboly. Tak například značku <? nahradí symbolem &lt;?. Takto „upravený“ PHP skript pak ztrácí svůj význam. Typickým představitelem takových to editorů je Microsoft FrontPage, který podporuje pouze tvorbu ASP skriptů.V tomto případě můžete použít značky <% a %>, které oddělují ASP skript od HTML kódu. Tyto značky však nejsou standardně nastaveny a musíte je proto povolit v konfiguračním souboru php.ini., kde parametr asp_tags nastavíte na hodnotu On:

; Allow ASP-style <% %> tags.
asp_tags = Off

V další části budeme pro oddělení PHP příkazů používat krátké značky <? a ?>.

Syntaxe PHP

Mezi oddělovací značky můžeme vložit jeden nebo několik příkazů skriptovacího jazyka PHP. Více příkazů lze vložit na jednu řádku (oddělovačem příkazu pak bude středník) nebo můžeme tyto příkazy vložit na samostatné řádky (řádky opět budou ukončeny středníkem).

Příklad:

<?
echo ˝Jeden příkaz…˝;
echo ˝Druhý příkaz…˝;
echo ˝Třetí příkaz…˝;
?>

Poznámka: V případě samotného nebo posledního příkazu se středník nemusí vkládat.

Názvy příkazů a funkcí PHP nejsou citlivá na velikost písmen. Příkaz echo, který zobrazí text, můžeme zadat jako eCHO, Echo, ECHO atd.

Je-li syntaxe PHP benevolentní při zadávání velikosti písmen příkazů, tak v případě proměnných je naopak velmi restriktivní. Při vytvoření jména proměnné musíme dodržovat tyto pravidla:

  • Proměnná vždy začíná znakem $ (dolar)
  • První znak názvu proměnné je písmeno nebo podtržítko
  • Při odkazu na proměnnou se musí dodržet velikost písmen. Proměnné $JMENO a $jmeno jsou odlišné proměnné

Poslední, o čem si v této části povíme, jsou komentáře. Význam komentářů jistě nemá smysl zdůrazňovat. V případě vytvoření rozsáhlého skriptu umožňují v něm ulehčit orientaci popřípadě vysvětlit danou část skriptu.

PHP podporuje komentáře ve formátu programovacích jazyků C, C++ a interpretu příkazů (shell) operačního systému Unix.

Příklad:

<?
/*
Toto je viceradkovy komentar C,
který muzeme pouzit pro vlozeni
delsiho textu.
*/
$PSC = "390 05"; /* Lze vlozit i za prikaz */

// Toto je jednoradkovy komentar C++
$VEK = 50; // Lze vlozit i za prikaz

# Komentar jako v Unix shellu
$JMENO = "Jan Novák" # Lze vlozit i za prikaz
?>

Proměnné a konstanty

Proměnné a konstanty slouží pro uložení různých hodnot. Rozdíl mezi proměnnými a konstantami je v tom, že u proměnné můžeme měnit při zpracování skriptu hodnotu. Konstanta nabývá hodnotu při její definici a zůstává neměnná po celou dobu zpracování skriptu.

Vytvoření proměnné je jednoduché. Lze ji vytvořit v libovolném místě skriptu. Proměnné standardně nabývají datový typ na základě vložené hodnoty.

Příklad:

<?
// Vytvoreni promenne JMENO
$JMENO = "Jan Novák";
echo $JMENO;
?>

Datové typy proměnných

PHP rozeznává tyto datové typy:

  • Jednoduché (skalární) typy:
    • Boolean – reprezentuje nejednodušší typ, nabývá dvou hodnot: pravda (TRUE) nebo nepravda (FALSE)
    • Integer – reprezentuje celá čísla v rozsahu –2 147 483 648 až 2 147 483 647. Zápis hodnot nemusí být pouze v desítkové (decimální) číselné soustavě, ale i v osmičkové (oktalové) nebo v šestnáctkové (hexadecimální) číselné soustavě. V případě osmičkové soustavy začíná hodnota číslicí 0 (nula). Hodnoty šestnáctkové soustavy musí začínat 0x (velikost písmen v zápisu šestnáctkové hodnoty nerozhoduje)
    • Double – reprezentuje čísla s desetinnou tečkou v rozsahu –1.7 · 10308 až 1.7 · 10308. Oddělovačem desetinných čísle je tečka. Zápis desetinného čísla lze provádět i v exponenciálním tvaru, například 2.7e2, tj. 2.7 · 102, neboli 270
    • String – reprezentuje řetězce
  • Složené typy:
    • Array – reprezentuje proměnné, které obsahují více hodnot
    • Object – reprezentuje objekt
  • Speciální typy:
    • NULL –reprezentuje proměnnou bez hodnoty
    • Resource – proměnná, která obsahuje referenci na externí zdroj, který byl vytvořen a používaný speciálními funkcemi

Příklady vytvoření proměnných jednoduchého typu:

$EXP = 1.5E2; // desetinné číslo, 1.5 · 102 = 150

Zjištění datového typu proměnné

Zjištění datového typu proměnné provádí funkce GetType(), která vrací název datového typu. Parametrem funkce je jméno proměnné.

Příklad:

$EXP = 1.5E2; // Vytvoření proměnné typu double
echo GetType($EXP); // Zobrazí řetězec double

Funkce GetType() na základě typu proměnné zobrazí tyto řetězce:

  • boolean – pro datový typ proměnné boolean
  • integer – pro datový typ proměnné integer
  • double – pro datový typ proměnné double
  • string – pro datový typ proměnné string
  • array – pro datový typ proměnné array
  • object – pro datový typ proměnné object
  • resource – pro datový typ proměnné resource
  • NULL – pro datový typ proměnné NULL
  • unknown type – pro neznámý datový typ proměnné

Další funkce, které umožňují zjistit konkrétní datový typ proměnné, jsou funkce typu Is_typ(), kde typ označuje konkrétní datový typ. Parametrem těchto funkcí jsou opět jména proměnných. Tyto funkce vrací pravdu (TRUE) nebo nepravdu (FALSE).

Jedná se o tyto funkce:

  • Is_array() – funkce vrací TRUE, je-li datový typ proměnné array
  • Is_bool() – funkce vrací TRUE, je-li datový typ proměnné boolean
  • Is_float() – funkce vrací TRUE, je-li datový typ proměnné double
  • Is_int() – funkce vrací TRUE, je-li datový typ proměnné integer
  • Is_integer() – funkce vrací TRUE, je-li datový typ proměnné integer, alias funkce is_int()
  • Is_long() – funkce vrací TRUE, je-li datový typ proměnné integer, alias funkce Is_int()
  • Is_null() – funkce vrací TRUE, je-li datový typ proměnné NULL
  • Is_numeric() – funkce vrací TRUE, obsahuje-li proměnná číslo číselný řetězec
  • Is_object() – funkce vrací TRUE, je-li datový typ proměnné object
  • Is_scalar() – funkce vrací TRUE, jedná-li se o jednoduchou proměnnou
  • Is_string() – funkce vrací TRUE, je-li datový typ proměnné string

Příklad:

$JMENO = "Jan Novák"; // Vytvoření řetězcové proměnné

if (Is_string($JMENO)) echo "Proměnná je řetězec.";
else echo "Proměnná není řetězec.";

Podmínka příkazu if bude vyhodnocena jako pravdivá, proto se zobrazí text "Proměnná je řetězec.".

Nastavení datového typu proměnné

Při zpracování skriptu může nastat situace, kdy budete muset předem definovat datový typ proměnné. Například fiktivní funkce ZadejVek() bude očekávat celočíselnou hodnotu, kterou budete předávat prostřednictvím proměnné $VEK. Funkce ZadejVek() bude provádět nejen test na vloženou hodnotu, ale i na datový typ. Je rozdíl, zda proměnná obsahuje celočíselnou hodnotu 36 nebo řetězcovou hodnotu ˝36˝. Významově jsou obě hodnoty shodné, ale liší se datovým typem. Protože funkce při přijetí řetězcové hodnoty může skončit chybou, musíme před vložením hodnoty proměnnou přetypovat.

K dispozici jsou dva způsoby:

  • Trvalé nastavení datového typu proměnné pomocí funkce SetType()
  • Dočasné přetypování datového typu proměnné

Funkce SetType() nastaví daný datový typ konkrétní proměnné. Funkce má dva parametry: jméno proměnné a název datového typu. Jako název datového typu můžete použít tyto hodnoty:

  • boolean, bool – pro nastavení datového typu boolean
  • integer, int – pro nastavení datového typu integer
  • float, double – pro nastavení datového typu double
  • string – pro nastavení datového typu string
  • array – pro nastavení datového typu array
  • object – pro nastavení datového typu object
  • null – pro nastavení datového typu NULL

Příklad:

$VEK = "36";
echo GetType($VEK);// Zobrazí řetězec string

SetType ($VEK, "integer");// Nastavení datového typu integer
echo GetType($VEK);// Zobrazí řetězec integer

Datový typ je nastaven tak dlouho, dokud se opět nepoužije funkce SetType() pro nastavení nového datového typu.

Dočasné přetypování typu proměnné se provádí zápisem převzatým z programovacího jazyka C. Před jméno proměnné, kterou chceme přetypovat, se vloží v závorce uvedený nový datový typ.

Příklady použití:

SetType ($VEK, "integer");// Nastavení datového typu integer
echo GetType($VEK);// Zobrazí řetězec integer
echo GetType((string)$VEK);// Zobrazí řetězec string
echo GetType($VEK);// Zobrazí řetězec integer

$a = "25";// Vytvoření řetězcové proměnné
$VEK = (integer)$a;// Přetypování řetězcové proměnné na celočíselnou

ZadejVek((integer) $a);// Přetypování řetězcové proměnné na celočíselnou

Přetypovat můžeme tyto datové typy:

  • <(boolean), (bool) – pro nastavení datového typu boolean/li>
  • (integer), (int) – pro nastavení datového typu integer
  • (float), (double), (real) – pro nastavení datového typu double
  • (string) – pro nastavení datového typu string
  • (array) – pro nastavení datového typu array
  • (object) – pro nastavení datového typu object

Proměnná typu pole

Prosměná typu pole obsahuje datovou strukturu, která umožňuje obsahovat více hodnot. Tyto hodnoty jsou pak dostupné na základě indexu. Tuto proměnnou si můžeme představit jako tabulku, jejíž řádky obsahují jednotlivé hodnoty. Jméno proměnné pole obsahuje hranaté závorky, do kterých se zapisuje index. Index je kladné celé číslo a standardně začíná hodnotou 0.

Pole může být jednoduché nebo vícerozměrné. Jednoduché pole obsahuje pro každý index pouze jednu hodnotu, zatímco vícerozměrné pole obsahuje pro každý index více hodnot.

Příklad vytvoření jednorozměrného pole $den[], které bude obsahovat jména dnů v týdnu:

$den[0] = "pondělí";
$den[1] = "úterý";
$den[2] = "středa";
$den[3] = "čtvrtek";
$den[4] = "pátek";
$den[5] = "sobota";
$den[6] = "neděle";

echo $den[3];// Zobrazí řetězec čtvrtek

Pokud se budete odkazovat na proměnnou typu pole bez zadání indexu, zobrazí se řetězec Array.

Příklad:

echo $den;// Zobrazí řetězec Array

Příklad vytvoření dvourozměrného pole $den[][], které bude v prvním sloupci obsahovat jména dnů v týdnu a v druhém sloupci jejich zkratky:

$den[0][1] = "pondělí";
$den[0][2] = "po";
$den[1][1] = "úterý";
$den[1][2] = "út";
$den[2][1] = "středa";
$den[2][2] = "st";
$den[3][1] = "čtvrtek";
$den[3][2] = "čt";
$den[4][1] = "pátek";
$den[4][2] = "pá";
$den[5][1] = "sobota";
$den[5][2] = "so";
$den[6][1] = "neděle";
$den[6][2] = "ne";

echo $den[0];// Zobrazí řetězec Array
echo $den[0][1];// Zobrazí řetězec pondělí
echo $den[0][2];// Zobrazí řetězec po

Místo číselného indexu lze v PHP používat i řetězec. Tento typ pole označujeme termínem asociativní pole.

Příklad asociativního pole adresar[]:

$adresar["jmeno"] = "Jan Novák";
$adresar["adresa"] = "Údolní 56";
$adresar["mesto"] = "Hrochův Týnec";
$adresar["psc"] = "123 45";

echo $adresar["jmeno"];// Zobrazí řetězec Jan Novák

Funkce pro práci s proměnnými typu pole:

  • Array() – vytvoří proměnnou typu pole
  • Count() – zobrazí počet prvků pole
  • Reset() – nastavení ukazatele na první index
  • Current() – zobrazí hodnotu prvku, na který je nastaven ukazatel
  • Key() – zobrazí index, na který je nastaven ukazatel
  • Next() – přesune ukazatel na další index pole
  • Prev() – přesune ukazatel na předchozí index pole
  • List() – načte jednotlivé prvky pole do proměnných

Příklady:

/*
Vytvoření pole se třemi prvky
*/
$ovoce = array("jablko", "hruška", "meruňka");
echo $ovoce[1];// Zobrazí řetězec hruška

/*
Výpis obsahu pole $ovoce[] pomocí příkazu for.
Funkce Count() vrací počet prvků.
*/
Počet prvků for ($i = 1; $i <= Count($ovoce); $i++) {
echo $ovoce [$i]; // Zobrazí jednotlivé hodnoty
}

/*
Výpis obsahu pole $ovoce[] pomocí příkazu while.
Pohyb po jednotlivých řádkách pole je zabezpečen funkcí next().
Jednotlivé hodnoty zobrazí fuknce current().
*/
reset ($ovoce);// Nastavení ukazatele na první index
while (key($ovoce)) {
echo key($ovoce); // Zobrazí index
echo current($ovoce);// Zobrazí hodnotu
next($ovoce);// Nastavení ukazatele na další index
}

/*
Načtení prkvů pole $ovoce[] do proměnných $ovoce_1, $ovoce_2 a $ovoce_3.
Pořadí proměnných, definovaných ve funkci list(), musí odpovídat pořadí
prvků v poli. Seznam proměnných je oddělen čárkou.
Funkce list() přiřazuje první proměnné hodnotu indexu 0. Protože v našem případě začíná pole indexem 1, není před první čárkou uvedena žádná proměnná.
*/
list (,$ovoce_1,$ovoce_2,$ovoce_3) = $ovoce;
echo $ovoce_2;// Zobrazí řetězec hruška

Proměnné typu objekt

PHP nabízí částečnou podporu pro objektově orientované programování (OOP). V rámci OOP se vytváří objekty, které se odkazují jak na funkce, tak na data. Vytvořením proměnné typu object se umožní přístup k vlastnostem objektu.

Před vytvořením proměnné typu objekt musíme vytvořit třídu (class). Definice třídy obsahuje proměnné a funkce.

Příklad vytvoření jednoduché třídy delej, která obsahuje jednu funkci f_delej(). Tato funkce bude pouze vypisovat text příkazem echo.

class delej
{
function f_delej()
{
echo "Provedení funkce f_delej()...";
}
}

Po vytvoření třídy se příkazem new vytvoří objekt.

$a = new delej;

Spuštění funkce se provede následujícím zápisem:

$a->f_delej();// Provedení funkce, která zobrazí text

Popis principu OOP by přesáhl jak svým rozsahem, tak svým významem, tuto knihu. Doporučuji prostudovat tuto problematiku v literatuře věnované objektovému programování.

Předdefinované proměnné

Vedle proměnných, které jsou ve skriptu definované uživatelem, existují i předdefinované proměnné. Často se tyto proměnné používají pro načtení hodnot, předaných do skriptu v rámci URL adresy (metoda GET protokolu HTTP) nebo při předání hodnot z formuláře (například metoda POST protokolu HTTP).

Seznam předefinovaných proměnných:

  • $_GLOBALS – odkaz na každou proměnnou, která je dostupná ve skriptu
  • $_SERVER – proměnné nastavované WWW-serverem. Nahrazuje stále platnou předefinovanou proměnnou $HTTP_SERVER_VARS
  • $_GET – proměnné poskytované skriptu metodou GET protokolu HTTP. Nahrazuje stále platnou předefinovanou proměnnou $HTTP_GET_VARS
  • $_POST – proměnné poskytované skriptu metodou POST protokolu HTTP. Nahrazuje stále platnou předefinovanou proměnnou $HTTP_POST_VARS
  • $_COOKIE – proměnné poskytované skriptu přes cookies. Nahrazuje stále platnou předefinovanou proměnnou $HTTP_COOKIE_VARS
  • $_FILES – proměnné poskytované skriptu HTTP protokolem při přenosu (upload) souboru. Nahrazuje stále platnou předefinovanou proměnnou $HTTP_POST_FILES
  • $_ENV – proměnné poskytované skriptu z prostředí, ve kterém běží PHP. Nahrazuje stále platnou předefinovanou proměnnou $HTTP_ENV_VARS
  • $_REQUEST – proměnné poskytované skriptu z libovolného vstupu
  • $_SESSION – proměnné, které jsou registrovány pro aktuální relaci (session) skriptu. Nahrazuje stále platnou předefinovanou proměnnou $HTTP_SESSION_VARS

Některým předdefinovaným proměnným se budeme věnovat v další části této kapitoly.

Konstanty

Jak jsme si již řekli, konstanty také slouží pro ukládání hodnot, ale na rozdíl od proměnných nelze tyto hodnoty uložené v konstantách měnit.

Vytvoření konstanty se provede funkcí Define(). Funkce má tři parametry. První parametr obsahuje jméno konstanty. Druhý parametr obsahuje hodnotu konstanty. Třetí parametr je nepovinný a určuje, zda bude jméno konstanty závislé na velikosti písmen. Standardně jsou konstanty citlivé velikost písmen. Chcete-li se na konstantu odkazovat různě velkými písmeny, nastavte třetí parametr jako true>.

Příklad vytvoření konstanty MAX_HODNOTA, která obsahuje hodnotu 100.

Define ("MAX_HODNOTA", 100);

V případě, že jméno konstanty je citlivé na velikost písmen, pak se při odkazu na chybně zadané jméno konstanty zobrazí pouze chybně zadaný řetězec.

Příklad:

Define ("MAX_HODNOTA", 100);
echo MAX_HODNOTA;// Zobrazí 100
echo max_hodnota;// Zobrazí řetězec max_hodnota

Define ("MIN_HODNOTA", 0, true);
echo MIN_HODNOTA;// Zobrazí 0
echo min_hodnota;// Zobrazí 0

Je-li konstanta ve skriptu definovaná, zjistíme pomocí funkce Defined().

Příklad testu na definici konstanty MAX_HODNOTA:

if (Defined("MAX_HODNOTA"))
echo "Konstanta MAX_HODNOTA je definována ";
else
echo "Konstanta MAX_HODNOTA není definována.";

Předdefinované konstanty

Podobně jako v případě proměnných, existují v PHP předdefinované konstanty. Tyto konstanty pak obsahují informaci o jménu skriptu či popis chyb různých úrovní.

Seznam předefinovaných konstant:

  • __FILE__ – jméno skriptu, který je právě zpracováván
  • __LINE__ – číslo řádku ve skriptu, který je právě zpracováván
  • PHP_VERSION – verze PHP
  • PHP_OS – název operačního systému, na kterém PHP běží
  • M_PI – zobrazí Ludolfovo číslo (3.14159265359)
  • TRUE – pravdivá hodnota
  • FALSE – nepravdivá hodnota
  • E_ERROR – označuje neošetřitelnou chybu
  • E_WARNING – označuje chybu, při které bude zpracování skriptu pokračovat dál
  • E_PARSE – chybná syntaxe skriptu
  • E_NOTICE – upozornění na možnou chybu
  • E_ALL – všechny E_ konstanty shrnuté do jedné

Výrazy a operátory

Než přejdeme k popisu základních příkazů PHP, povíme si stručně o výrazech a operátorech.

Výraz je základ každého programovacího jazyka. Jednoduše řečeno, výraz je vše, co obsahuje hodnotu. Výrazem jsou konstanta, proměnná, přiřazení hodnoty, volání funkce atd.

Při tvorbě výrazu se velmi často používají operátory. V PHP rozeznáváme tyto operátory:

  • Aritmetické operátory
  • Operátory přiřazení
  • Operátory pro binární čísla
  • Operátory porovnání
  • Operátory řízení chyb
  • Prováděcí operátory
  • Inkrementační a deinkrementační operátory
  • Logické operátory
  • Řetězcové operátory

Aritmetické operátory

Operátor

Popis

+

Sčítání

-

Odčítání

*

Násobení

/

Dělení

%

Zbytek po dělení


Tabulka: Aritmetické operátory

Operátory přiřazení

Operátorem přiřazení je znak =. Výsledkem operace přiřazení je předání hodnoty výrazu na pravé straně výrazu na levé straně.

Příklady přiřazení:

$JMENO = ˝Jan Novák˝;

Vedle tohoto základního operátoru přiřazení existují v PHP kombinované operátory. Tyto operátory se skládají kombinací aritmetických a řetězcových operátorů.

Příklady kombinovaných operátorů:

$a = 10;// Nastavení hodnoty 10
$a += 3;// Nastavení hodnoty 13, tj. 10 + 3
echo $a;// Zobrazí 13

$a = 10;// Nastavení hodnoty 10
$c = ($b = 5) + $a;// Nastavení hodnoty 5 proměnné $b a vykonání součtu
echo $c;// Zobrazí 15

$JMENO = "Jan ";// Nastavení řetězce Jan
$JMENO .= "Novák";// Zřetězení řetězců Jan a Novák
echo $JMENO;// Zobrazí řetězec Jan Novák

Operátory pro binární čísla

Operátor

Popis

$a & $b

Logický součin (And)

$a | $b

Logický součet (Or)

$a ^ $b

Exkluzivní logický součet (Xor )

~ $a

Negace (Not)

$a << $b

Posun bitů v $a o počet $b vlevo

$a >> $b

Posun bitů v $a o počet $b vpravo


Tabulka: Operátory pro binární čísla

Operátory porovnání

Operátor

Popis

==

Rovnost

===

Rovnost a shoda datového typu

!=

Nerovnost

<>

Nerovnost

!==

Nerovnost nebo neshoda datového typu

<

Menší než

>

Větší než

<=

Menší nebo rovno

>=

Větší nebo rovno

(výraz_1)?(výraz_2):(výraz_3)

Podmíněný (ternární) operátor. Je-li výraz_1 pravdivý je nastavena hodnota výrazu výraz_2, jinak výrazu výraz_3.


Tabulka: Operátory porovnání

 

Operátor řízení chyb

PHP podporuje operátor řízení chyb, který je označen znakem @. Je-li tento operátor použit před výrazem, nebudou v případě chybně vykonaného výrazu zobrazena chybová zpráva.

Příklad:

echo "Začátek zpracování";
$a = 10 / 0;// Nedovolená matematická operace dělení nulou
echo "Pokračuje zpracování";

Při zpracování bude zobrazen v prohlížeči i text varovné zprávy:

Začátek zpracování
Warning: Division by zero in c:\root\home\php\operátory.php on line 38
Pokračuje zpracování

Příklad použití operátoru řízení chyb:

echo "Začátek zpracování";
$a = @(10 / 0)// Vložení operátoru řízení chyb
echo "Pokračuje zpracování";

V tomto případě bude chybová zpráva potlačena:

Začátek zpracování
Pokračuje zpracování

Operátor řízení chyb lze použít pouze ve spojení s výrazy. Nelze jej použít ve spojení s definicí funkcí či tříd.

Prováděcí operátory

Prováděcí operátor umožňuje vykonat příkaz v příkazovém řádku operačního systému. Příkaz, který se má vykonat, se vloží mezi obrácené apostrofy `příkaz`. PHP bude tento příkaz provádět v prostředí interpretu příkazů operačního systému.

Příklad provedení příkazu dir (výpis obsahu aktuálního adresáře) v prostředí operačního systému Microsoft Windows 2000:

/*
Příkaz dir zobrazí obsah adresáře,
ve kterém se nachází spuštěný PHP skript
*/
$cmd = `dir`;
echo $cmd;// Zobrazí výstup příkazu dir

Inkrementační a deinkrementační operátory

Operátor

Popis

++$a

Inkrementace (zvýšení) $a o jedna. Nejdříve se provede inkrementace, pak se vrátí hodnota.

$a++

Inkrementace $a o jedna. Nejdříve se vrátí hodnota, pak se provede inkrementace.

--$a

Dekrementace (snížení) $a o jedna. Nejdříve se provede dekrementace, pak se vrátí hodnota

$a--

Dekrementace $a o jedna. Nejdříve se vrátí hodnota, pak se provede dekrementace.


Tabulka: Operátory inkrementace a deinkrementace

Příklad:

$a = 10;
echo $a++; // Zobrazí 10

$a = 10;
echo ++$a; // Zobrazí 11

Logické operátory

Operátor

Popis

$výraz_1 and $výraz_2

Složený výraz je pravdivý, jsou-li oba výrazy pravdivé.

$výraz_1 && $výraz_2

Složený výraz je pravdivý, jsou-li oba výrazy pravdivé.

$výraz_1 or $výraz_2

Složený výraz je pravdivý, je-li jeden z výrazů nebo oba výrazy pravdivé.

$výraz_1 || $výraz_2

Složený výraz je pravdivý, je-li jeden z výrazů nebo oba výrazy pravdivé.

$výraz_1 xor $výraz_2

Složený výraz je pravdivý, je-li pouze jeden z výrazů pravdivý.

! $výraz

Negace výrazu. Z pravdivého výrazu se stane nepravdivý a naopak.


Tabulka: Logické operátory

Řetězcové operátory

Řetězcové operátory slouží pro spojení řetězců. Spojení řetězců provádí operátor tečka ˝.˝

Příklad:

$JMENO = "Jan ";
$CELE_JMENO = $JMENO . "Novák";
echo $CELE_JMENO; // Zobrazí řetězec Jan Novák

Spojení řetězců ke možné provádět i v okamžiku přiřazení operátorem .=.

Příklad:

$ADRESA = "V údolí ";
$ADRESA .= "525";
echo $ADRESA; // Zobrazí řetězec V údolí 525

Příkazy

Příkaz if

Příkaz if slouží pro podmíněné provedení části skriptu.

if (výraz)
příkaz

Za slovem if je v závorce uveden výraz. Je-li pravdivý, vykoná se příkaz příkaz. V opačném případě se neprovede nic a pokračuje se zpracováním kódu skriptu za příkazem if. V případe vykonání více příkazů se tyto příkazy uvozují do složených závorek.

V případě, že při nesplnění podmínky se mají také vykonat příkazy, použije se slovo else, za které se uvede jeden nebo několik příkazů.

if (výraz)
příkaz_1
else
příkaz_2

Posledním způsobem, jak rozšířit příkaz if, je použití slova elseif, za kterým následuje v závorce výraz.

if (výraz)
příkaz_1
else
if (výraz)
příkaz_2

Příkaz nebo příkazy, které jsou za slovem elseif uvedeny se vykonají v případě nesplnění podmínky ze slovem if a splnění podmínky za slovem elseif. Není-li splněna podmínka za eleseif, může se použít další vyhodnocení podmínky pomocí dalšího elseif nebo použít else.

Příklad:

$VEK = 18;
if ($VEK > 18) echo "Je vám více než 18 let.";
elseif ($VEK < 18) echo "Je vám méně než 18 let.";
else echo "Je vám 18 let.";

Příklad zobrazí řetězec Je vám 18 let.

Příkaz while

Příkaz while vytváří cyklus. Příkaz while se vykonává tak dlouho, dokud je pravdivý výraz výraz.

while (výraz)
příkaz

Příklad:

$POCET = 0;
while ($POCET < 10) {
echo $POCET;
$POCET++;
}

Příkaz while se bude provádět tak dlouho, dokud proměnná $POČET bude menší než 10.

Příkaz do…while

Příkaz do…while také vytváří cyklus, který se vykonává tak dlouho, dokud je pravdivý výraz výraz.

do
příkaz
while(výraz)

Na rozdíl od příkazu while se test na splnění podmínky provádí až po vykonání smyčky cyklu, to znamená, že cyklus aspoň jednou provede.

Příkaz for

Příkaz for vytváří cyklus, ale na rozdíl od příkazů while a do…while se počet smyček řídí nastavením čítače.

for (výraz_1; výraz_2; výraz_3)
příkaz

Výraz výraz_1 nastavuje výchozí hodnotu čítače, výraz výraz_2 udává maximální hodnotu čítače a výraz_3 zvyšuje (nebo zmenšuje) hodnotu čítače po každém vykonání smyčky.

Příklad:

for ($i = 0; $i < 10; $i++) {
echo $i;
}

Příkaz for se bude vykonávat tak dlouho, dokud proměnná $i, která zde reprezentuje čítač bude menší než 10. V našem příkladě se cyklus vykoná desetkrát.

Příkaz foreach

Příkaz forech je obdobou příkazu for. Počet cyklů není však dán čítačem, ale počtem prvků proměnné typu pole.

foreach ($proměnná_pole as $pomocná_proměnná)
příkaz

Příkaz foreach se bude vykonávat tak dlouho, kolik prvků obsahuje pole $proměnná_pole. Při vykonání každé smyčky bude hodnota aktuálního prvku pole načtena do proměnné $pomocná_proměnná.

Příklad:

$ovoce = array("jablko", "mandarinka", "broskev");
foreach ($ovoce as $plod) {
echo $plod;
}

Příkaz foreach se vykoná třikrát. Přesně tolik je prvků v poli $ovoce. Při každém vykonání smyčky se vypíše obsah pole, který byl uložen do proměnné $plod.

Příkaz foreach umí i pracovat s indexy pole.

Příklad:

$ovoce = array("jablko", "mandarainka", "broskev");
foreach ($ovoce as $index => $plod) {
echo $index;
echo $plod;
}

V našem příkladě bude při vykonání smyčky přiřazena hodnota indexu do proměnné $index a hodnota prvku do proměnné $plod.

Příkaz break

Příkaz break ukončí provádění těchto příkazů: for, foreach, while, do…while a switch.

Příklad:

$POCET = 0;
while ($POCET < 10) {
$POCET++;
if ($POCET == 5) break;
echo $POCET;
}

Příkaz while bude předčasně ukončen, když hodnota v proměnné $POCET bude 5.

Příkaz break může obsahovat číselný argument, který říká z kolika vnořených struktur má vyskočit. V předchozím příkladu je příkaz break součástí jediné struktury. V tomto případě můžeme použít zápis break 1.

Příkaz continue

Příkaz continue ukončí provádění smyčky cyklu. Cyklus bude pokračovat zpracováním další smyčky.

Příklad:

$POCET = 0;
while ($POCET < 10) {
$POCET++;
if ($POCET == 5) continue;
echo $POCET;
}

Smyčka příkazu while bude předčasně ukončena (nebude proveden příkaz echo), když hodnota proměnné $POCET bude 5. Cyklus while bude pokračovat zpracováním další smyčky.

Podobně jako příkaz break může příkaz continue obsahovat číselný argument, který říká kolik vnořených struktur má ukončit. V předchozím příkladu je příkaz continue součástí jediné struktury. V tomto případě můžeme použít zápis continue 1.

Příkaz switch

Příkaz switch má podobné chování jako příkaz if. Na základě testu jednoho výrazu na konkrétní provede jeden nebo několik příkazů, které jsou ukončeny příkazem break. Není-li příkaz break uveden, pokračuje se prováděním příkazů v dalších volbách tak dlouho, dokud není nalezen příkaz break nebo konec příkazu switch.

switch (výraz) {
case hodnota_1:
příkaz_1;
break;
case hodnota_2:
příkaz_2;
break;
default:
příkaz_n;
}

Příkaz switch vykoná zadané příkazy pouze při shodě výrazu a hodnoty za slovem case. Mají-li se vykonat příkazy i při neshodě, uvede se za slovem default. Tato volba se musí uvést na konci příkazu switch.

V případě, že se výraz může shodovat s více hodnotami, pro které se mají vykonat stejné příkazy, uvedou se pouze slova case s danými hodnotami.

Příklad:

$JMENO = "Novotný";
switch ($JMENO) {
case "Admin":
echo "Jste přihlášen jako administrátor.";
break;
case "Novák":
case "Novotný":
case "Nový":
echo "Jste přihlášen jako uživatel $JMENO.";
break;
default:
echo "Bohužel, nejste v seznamu uživatelů.";
break;
}

V našem příkladu se zobrazí řetězec Jste přihlášen jako uživatel Novotný.

Příkaz return

Tento příkaz se volá z funkce a vrací výsledek funkce.

Příklad:

function DejTyp ($hodnota){
$typ = GetType ($hodnota);
return $typ;
}

echo DejTyp("To je pokus.");

Uživatelem definovaná funkce DejTyp() vrací datový typ předaného parametru. V našem případě se zobrazí text string.

Příkazy require a include

Příkaz require a include souží k načtení a provedení jiného souboru. Parametrem obou příkazů je cesta ke vkládanému souboru. Cestu k souboru se nastavuje relativně k adresáři, ze kterého byl skript s příkazem require nebo include spuštěn. Dalším způsobem je nastavit cestu k adresáři s vkládanými soubory v direktivě include_php v konfiguračním souboru php.ini:

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"

V následujícím příkladu si ukážeme vložení skriptu funkce.ini do skriptu require.php pomocí příkazu require.

Obsah vkládaného skriptu funkce.ini, který obsahuje definici funkce DejTyp():

function DejTyp ($hodnota){
$typ = "<h2>" . GetType ($hodnota) . "</h2>";
return $typ;
}

Vložení souboru příkazem require:

require "funkce.php";
echo DejTyp("To je pokus.");

Příkazy include a require se liší zpracováním odkazu na neexistující soubor. Příkaz include zobrazení pouze varování a umožní další zpracování skriptu. Příkaz require zobrazí chybu a předčasně ukončí zpracování skriptu.

Příkazy require_once a include_once

Příkazy require_once a include_once se od příkazů require a include liší tím, že umožní vkládaný soubor vložit pouze jednou. Tedy i v případě několikanásobného vložení stejného souboru příkazem require_once, bude soubor vložen pouze jednou.

Uživatelem definované funkce

Vytvoření uživatelem definované funkce je v PHP velmi jednoduché. Definice funkce má tento tvar:

function jméno_funkce (parametr_1, parametr_2, ..., parametr_n) {
příkaz_1;
příkaz_n;
return hodnota;
}

Funkce se volají z jakéhokoliv místa ve skriptu zadáním jména funkce, například Stav(). Parametry se funkci předávají při jejím volání. Počet předávaných parametrů musí odpovídat počtu parametrů v definici funkce.

Funkce může obsahovat příkaz return, který ukončí zpracování funkce a vrátí výsledek.

Příklady jednoduchých funkcí:

/*
Fuknce Stav() vypíše jméno souboru a číslo
práve zpracovávaného řádku
*/
function Stav(){
echo "Nacházíte se v souboru " . __FILE__ . "na řádce " . __LINE__ . ".";
}
Stav(); // Zobrazí řetězec Nacházíte se v …

/*
Fuknce Scitej() provede soucet dvou čísel,
které byly fukci předané jako parametry.
Výslednou hodnotu pak vrátí příkazem return.
*/
function Scitej ($a,$b){
return $a + $b;
}
echo Scitej (6,8); // Zobrazí 14

Platnost proměnných ve funkci

Proměnné, které jsou definované v těle funkce, mají platnost pouze ve funkci. V případě, že ve skriptu a ve funkci jsou vytvořené proměnné se stejným jménem, jedná se o dvě různé proměnné.

Příklad:

$text = "AAAAAAAA"; // Vytvoření proměnné $text ve skriptu

function Nastav_1 ($parametr){
$text = $parametr; // Vytvoření proměnné $text ve funkci
return $text; // Vrácení obsahu proměnné $text
}

echo $text; // Zobrazí AAAAAAAA
echo Nastav_1 ("ZZZZZZZZ"); // Zobrazí ZZZZZZZZ
echo $text; // Zobrazí AAAAAAAA

Abychom mohli ve funkci pracovat s proměnnými, které byly definovány ve skriptu, musíme použít systémovou proměnnou $GLOBALS, která obsahuje odkazy na všechny proměnné ve skriptu.

Příklad:

$text = "AAAAAAAA"; // Vytvoření proměnné $text ve skriptu

function Nastav_2 ($parametr){
$GLOBALS["text"] = $parametr; // Nová hodnota promměné skriptu $text
$text = $parametr; // Vytvoření proměnné $text ve funkci
return $text; // Vrácení obsahu proměnné $text
}
echo $text; // Zobrazí AAAAAAAA
echo Nastav_2 ("ZZZZZZZZ"); // Zobrazí ZZZZZZZZ
echo $text; // Zobrazí ZZZZZZZZ

$GLOBALS["text"] a $text jsou různé proměnné. Proměnná $GLOBALS odkazuje na proměnnou $text, která byla definována ve skriptu.

Předání parametrů do PHP skriptu

Metoda GET

Metoda GET umožňuje předávat parametry a jejich hodnoty do PHP skriptu například v rámci URL adresy nebo z HTML formuláře. V prvním případě se za URL adresu vloží otazník, ze kterým bude následovat seznam parametrů a jejich hodnot.

Příklad:

http://localhost/knihovna/get.php?jmeno=Karel&prijmeni=Janda

Oddělovačem parametrů je znak &.

Ve skriptu se pak budeme na jednotlivé parametry odkazovat jako na prvky asociovaného pole $_GET. Indexem pole je jméno parametru.

Příklad jednoduchého skriptu get.php:

<HTML>
<HEAD>
<TITLE>Metoda GET</TITLE>
</HEAD>

<BODY>
<h1>Metoda GET</h1>
<?
echo "<b>Vaše jméno: </b>" . $_GET['jmeno'] . " " . $_GET['prijmeni'];
}
?>
</BODY>

</HTML>

Zobrazit všechny parametry můžeme například pomocí PHP příkazu foreach:

foreach ($_GET as $index => $hodnota) {
echo "<b>$index:</b> $hodnota <br>";
}

Hodnota indexu je ukládána do proměnné $index a hodnota prvku do proměnné $hodnota.

Chcete-li předávat více parametrů se stejným jménem, musíte je v URL adrese definovat jako pole, to znamená, za jméno parametru vložit hranaté závorky []. Nebudou-li parametry označeny jako pole, pak se do PHP skriptu přenese naposledy vložená hodnota.

Příklad:

http://localhost/knihovna/get.php?jmeno=Karel&prijmeni=Janda&zajmy[]=sport&zajmy[]=hudba

V PHP skriptu pak samozřejmé musíte s těmito parametry pracovat jako s proměnnými typu pole.

Příklad:

echo "<b>Vaše zájmy: </b>" . $_GET['zajmy'][0] . " " . $_GET['zajmy'][1];

Příklad předání parametrů metodou GET z HTML formuláře.

<HTML>
<HEAD>
<TITLE>Metoda GET - formulář</TITLE>
</HEAD>

<BODY>
<h1>Metoda GET</h1>
<form action="get.php" method="GET">
<p>Jméno: <input type="text" name="jmeno"></p>
<p>Příjmení: <input type="text" name="prijmeni"></p>
<p>Zájmy:
<select name="zajmy[]" multiple size=2>
<option>sport</option>
<option>hudba</option>
<option>literatura</option>
</select>
</p>
<p><input type="submit" name="odeslat" value="Potvrdit"></p>
</form>
</BODY>
</HTML>

Všimněte si, prosím, jak je definováno jméno parametru zajmy v rolovacím poli <select multiple>.

Metoda POST

Předání parametrů metodou POST a jejich zpracování je ekvivalentní s metodou GET. Rozdíl spočívá, že ve skriptu se budeme na jednotlivé parametry odkazovat jako na prvky asociovaného pole $_POST. Indexem pole je opět jméno parametru.

HTML formulář musí mít nadefinovaný typ metody POST:

<form action="POST.php" method="POST">

Příklad zpracování proměnné $_POST:

echo "<b>Vaše jméno: </b>" . $_POST['jmeno'] . " " . $_POST['prijmeni'];

Session

Dalším způsobem, jak předat parametry do PHP skriptu, či lépe řečeno, jak sdílet obsah jedné proměnné více skripty, je použití session.

Co je to session?

Pojmem session se označuje spojení mezi prohlížečem a aplikací na WWW-serveru Apache. V rámci session lze definovat proměnné, které jsou uloženy na externím zařízení, například fyzický adresář na disku serveru. Tyto proměnné jsou pak po dobu spojení dostupné ze všech PHP skriptů. Spojení je ukončeno při opuštění aplikace.

Na tyto proměnné se pak budeme odkazovat jako na hodnoty asociovaného pole $_SESSION, jehož indexem je jméno proměnné a hodnotou pole je hodnota proměnné.

Aktivace session

Aby jste mohli ve vaší aplikaci využívat session, musíte ji aktivovat. Aktivace session se provede buď jednorázově nastavením v konfiguračním souboru php.ini, nebo při spuštění PHP skriptu, který chce vlastnosti session využívat.

Příklad nastavení automatického zapnutí sessionphp.ini:

; Initialize session on request startup.
session.auto_start = 0

Hodnotu session.auto_start změníte z 0 na 1.

Příklad aktivace session při spuštění skriptu:

<? session_start(); ?>

Proměnné, které budou vytvořeny jsou standardně uloženy v souboru.

Aby nedošlo k záměně souborů, kdy s aplikací pracuje více uživatelů, je každé spojení jednoznačně identifikováno. Jméno souboru je totožné s jednoznačnou identifikací session, například sess_44db80c13c7da9801e4096efbd930acf. Tyto soubory jsou uloženy v adresáři, který je definován v souboru php.ini.

Příklad nastavení adresáře se soubory session v prostředí operačních systémů Microsoft Windows:

session.save_path = C:\PHP\sessiondata

Použití session v PHP skriptu

Použití session si prakticky ukážeme na tomto příkladě. Vytvoříme si skript, který bude obsahovat jednoduché počítadlo:

<? session_start(); ?>
<HTML>
<HEAD>
<TITLE>Session - počítadlo</TITLE>
</HEAD>
<BODY>
<h1>Počítadlo</h1>
<?

if (session_is_registered ("pocitadlo")){
echo "<h2>Stav počítadla:</h2>";
$_SESSION["pocitadlo"]++;
echo $_SESSION["pocitadlo"];
}
else {
echo "<h2>Počítadlo není inicializované.</h2>";
echo "Inicializuji ..";
$_SESSION["pocitadlo"] = 0;
echo ".. OK";
}
?>
<h4><a href="session.php">Aktualizuj</a></h4>
</BODY>
</HTML>

První akcí je aktivace session pomocí funkce session_start(). Další akcí je vytvoření proměnné $_SESSION["pocitadlo"]. Tato proměnná bude uložena do souboru, který byl při první aktivaci session vytvořen. V našem případě to bude například soubor sess_44db80c13c7da9801e4096efbd930acf.

Aby se proměnná při každém spuštění tohoto skriptu znovu nevytvářela, použijeme funkci session_is_registered (), která otestuje, zda proměnná již byla registrována.

Nebyla-li proměnná $_SESSION["pocitadlo"] registrována, musíme ji vytvořit. V našem případě tedy:

$_SESSION["pocitadlo"] = 0;

Do souboru sess_44db80c13c7da9801e4096efbd930acf se uloží definice této proměnné. Formát informace o proměnných je následující:

proměnná_1|typ:hodnota; … ;proměnná_n|typ:hodnota

V našem případě bude soubor obsahovat:

pocitadlo|i:0;

Byla-li již proměnná $_SESSION["pocitadlo"] vytvořena, pouze se změní její aktuální hodnota:

$_SESSION["pocitadlo"]++;

Soubor pak bude obsahovat:

pocitadlo|i:1;

Nezapomeňte, že toto počítadlo bude aktuální pouze pro konkrétní připojení. Při ukončení práce s aplikací bude ukončena i tato session. Při dalším novém spojením bude počítadlo opět inicializováno.

Další funkce pro session

Kompletní popis session a všech funkcí naleznete v originální dokumentaci, například na http://www.php.net/manual/cs/ref.session.php.

Tímto jsme dokončily stručné seznámení s PHP a nyní se pustíme do popisu databázového serveru MySQL.

MySQL

Posledním produktem, který si v této kapitole popíšeme je databázový server MySQL od švédské společnosti MySQL AB, http://www.mysql.com/ .MySQL je open-source projekt, který je distribuován zdarma v rámci GNU General Public Licence (GPL) a patří mezi nejvíce oblíbené databáze. MySQL využívají nejen velké společnosti jako například Yahoo, Motorola, NASA, ale můžete se s ní setkat v řadě dalších komerčních i nekomerčních WWW-aplikací.

Základní vlastnosti MySQL:

·        MySQL je rychlý, spolehlivý a výkonný relační databázový systém, který umožňuje zpracování velkého množství dat.

·        Jednoduchá administrace.

·        MySQL je open-source projekt.

·        Je distribuován pro více platforem operačních systémů.

·        Pro nekomerční použití je distribuován zdarma

·        Stabilní verze MySQL 3.23 nepodporuje transakce. Tuto nevýhodu odstraňuje verze MySQL 4, která transakce podporuje, ale která se zatím nachází ve stádiu vývoje.

·        MySQL nabízí rozhraní API pro programovací jazyky C++, Perl, Ruby a Python, a rozhraní pro připojení dalších aplikací prostřednictvím ODBC (Microsoft Open Database Conectivity) a JDBC (Java Database Connectivity). Podporu pro MySQL nabízejí i další programovací jazyky, například PHP.

Instalace

Databázový server MySQL je k dispozici na http://www.mysql.com/downloads/. K volnému stažení jsou dostupné jak soubory s binární instalací, tak soubory se zdrojovým kódem.

Binární instalace je určena pro operační systémy Linux, Microsoft Windows, Solaris, FreeBSD, MacOS X, HP-UX, AIX, SCO, SGI Irix, Digital OSF, BSDi. Formát binárních souborů závisí na konkrétním operačním systému. Ve většině případů je instalace zabalena pomocí archivačního a komprimačního souboru.

Soubory se zdrojovým kódem jsou k dispozici jako zkomprimované soubory .tar.gz, nebo instalační soubory .rpm nebo .zip (pro operační systémy Microsoft Windows).

Poznámka: Samozřejmě, že i instalace MySQL je součástí distribuce operačního systému. V tomto případě opět platí to, co jsme si uvedli v části věnované WWW-serveru Apache.

Instalace překladem zdrojového kódu

Instalaci překladem zdrojového kódu si popíšeme v prostředí operačních systémů Unix. Instalaci si opět rozdělíme do několika bodů:

1.Instalační soubor se zdrojovým kódem získáte na http://www.mysql.com/Downloads/MySQL-3.23/. V době vzniku této publikace byl dostupný soubor mysql-3.23.51.tar.gz.

5.Tato instalace odpovídá již dříve popsaným instalacím WWW-serveru Apache a PHP, proto se pouze zobrazíme použité příkazy:

# tar xvzf mysql-3.23.51.tar.gz
# cd mysql-3.23.51
# ./configure –-prefix=/usr/local/mysql
# make
# make install

6.Nyní spustíme skript mysql_install_db, který vytvoří systémová databáze mysql a cvičná databáze test a provede další nastavení prostředí MySQL.

# /usr/local/mysql/bin/mysql_install_db

Posledním krokem je nastavení vlastníků adresáře /usr/local/mysql:

# chown -R root /usr/local/mysql
# chown -R mysql /usr/local/mysql/var
# chgrp -R mysql /usr/local/mysql

7.Kontrolu instalace provedeme spuštění příkazu safe_mysqld, který inicializuje start databázového serveru MySQL.

# /usr/local/mysql/bin/safe_mysqld --user=mysql &

Pokud se server spustil bez problému, je vše v pořádku a můžeme s MySQL pracovat.

Binární instalace v prostředí Microsoft Windows

Binární instalace je opět velmi jednoduchá. Soubor s binární instalacíjsou pro svoji velikost distribuovány ve zkomprimovaném souboru (.zip), například mysql-3.23.51-win.zip. Tento soubor rozbalíme do pomocného adresáře, například C:\WINNT\Temp, příkazem cd se do tohoto adresáře přepneme a spustíme soubor setup.exe. Opět se zobrazí se úvodní okno průvodce instalací, který bude postupně zobrazovat okno s informacemi o dané verzi, okno s výběrem cílového adresáře (implicitní je adresář C:\Mysql) a okno s výběrem typu instalace (implicitní je typická instalace). Poté se provede vlastní instalace do cílového adresáře.

Spuštění a zastavení MySQL v prostředí Unix a Linux

Start serveru MySQL z příkazové řádky

Start MySQL provede příkaz safe_mysqld.

# /usr/local/mysql/bin/safe_mysqld &

Starting mysqld daemon with databases from /usr/local/mysql/var

Znak &, který je přidán za příkaz, umožní spuštění příkazu na pozadí, to znamená po spuštění tohoto příkazu se opět zobrazí výzva (prompt) příkazové řádky. Pokud by se příkaz spustil bez znaku &, bude příkazová řádka dostupná až po ukončení MySQL.

Ukončení činnosti MySQL provádí příkaz mysqladmin s parametrem shutdown.

# /usr/local/mysql/bin/mysqladmin shutdown
020602 13:06:30 mysqld ended

Automatický start MySQL

Automatický start serveru MySQL umožňuje skript mysql.sever, který je uložen v adresáři /usr/local/mysql/share/mysql. Skript očekává dva parametry start a stop. Jak vyplývá z jejich názvů, první slouží pro spuštění MySQL, druhý k jeho zastavení.

Příklad spuštění serveru MySQL:

/usr/local/mysql/share/mysql/mysql.server start

Starting mysqld daemon with databases from /usr/local/mysql/var

Příklad zastavení serveru MySQL:

/usr/local/mysql/share/mysql/mysql.server stop

Killing mysqld with pid číslo_procesu
020602 13:06:30 mysqld ended

Chcete-li server MySQL spustit při startu operačního systému, postupujte stejným způsobem jako v případě WWW-serveru Apache. Opět se vytvoří symbolický odkaz, v tomto případě na skript mysql.server, jehož cílem budou soubory v adresářích, které se používají pro přechod do konkrétní úrovně běhu operačního systému Unix nebo Linux. Pro zopakování, jedná se o adresáře, které jsou umístěny v adresáři /etc/rc.d.

Spuštění a zastavení MySQL v prostředí Microsoft Windows

MySQL jako služba operačního systému

Databázový server lze v prostředí Microsoft Windows NT a 2000 spouštět jako služba operačního systému. Instalace služby se provede spuštěním souboru mysqld.exe s parametrem –-install. Soubor je umístěn v adresáři C:\mysql\bin. Výsledkem činnosti příkazu bude vytvoření služby mysql:

C:\mysql\bin>mysqld –-install
Service successfully installed.

Služba mysql bude spouštět binární soubor C:\mysql\bin\mysqld.

Správu, zda se má služba MySQL spouštět automaticky při startu operačního systému nebo ručně, popřípadě pozastavení a opětovné spuštění služby, opět provedete standardním způsobem, například ve Windows 2000: Start\Nastavení\Ovládací panely\Nástroje pro správu\Služby.

Start služby MySQL z příkazové řádky

Spuštění a ukončení služby MySQL z prostředí příkazové řádky provede příkaz NET, který jsme si popsali v části věnované WWW-serveru Apache. Příklad spuštěni služby:

C:\mysql\bin>net start mysql

Služba MySql byla úspěšně spuštěna.

Spuštění a ukončení MySQL z příkazové řádky

V případě, že nechcete, nebo systém neumožňuje, MySQL spouštět jako službu, můžete použít pro spuštění příkaz mysqld s parametrem –-standalone.

C:\mysql\bin>mysqld –-standalone

Příkazová řádka v okně se spuštěným MySQL serverem je po celou dobu běhu serveru nedostupná.

Ukončení činnosti MySQL provádí příkaz mysqladmin s parametrem shutdown.

mysqladmin shutdown

Správa databází a tabulek

Správu databází a tabulek budeme provádět prostřednictvím klienta mysql, který se spouští z příkazové řádky. Použití tohoto klienta je shodné pro všechny platformy operačních systémů.

Poznámka: Existuje řada grafických aplikací, které jsou určeny pro správu MySQL serveru, ale jejich popis by opět překročil rozsah této kapitoly.

Klient mysql

Klient serveru MySQL se spouští příkazem mysql. Příkaz si popíšeme v prostředí Microsoft Windows. V prostředí Unix/Linux se chová stejně. V našem případě se bude klient připojovat k serveru na lokálním počítači.

C:\mysql\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 3.23.51-max-debug

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Pro připojení ke vzdálenému MySQL serveru se musí jméno počítače, nebo jeho IP adresa, definovat pomocí přepínače –h.

C:\mysql\bin>mysql -h 10.0.0.104

Po úspěšném přihlášení se zobrazí úvodní informace a výzva příkazové řádky klienta.

Pro potvrzení a provedení příkazu se za každý příkaz vkládá středník (;).

Ukončení práce v mysql

Činnost v mysql ukončíte příkazem quit.

mysql> quit
Bye

C:\mysql\bin>

Správa databází

Vytvoření databáze

Databáze se vytvoří příkazem create database, ze který se uvede jméno databáze.

mysql> create database knihovna;
Query OK, 1 row affected (0.08 sec)

Zobrazení seznamu databází

Seznam všech databází, které byly vytvořeny v prostředí MySQL serveru provede příkaz show databases.

Příklad:

mysql> show databases;
+----------+
| Database |
+----------+
| knihovna |
| mysql |
| test |
+----------+
3 rows in set (0.06 sec)

Nastavení databáze

Abychom mohli v konkrétní databázi pracovat, například vytvářet tabulky, upravovat záznamy apod., musíme se do jejího prostředí přepnout příkazem use.

Příklad:

mysql> use knihovna;
Database changed

Odstranění databáze

Odstranění databáze z MySQL serveru provede příkaz drop database.

mysql> drop database knihovna;
Query OK, 0 rows affected (0.04 sec)

Správa tabulek

Vytvoření tabulky

Tabulku vytvoříme pomocí SQL příkazu create table.

mysql> create table kartoteka
-> (
-> id int auto_increment primary key,
-> autor char(50),
-> titul char(100),
-> poznamka text
-> );
Query OK, 0 rows affected (0.22 sec)

V našem příkladu jsme vytvořili tabulku kartoteka, která se skládá ze tří textových polí a jednoho celočíselného pole, které má nastavenou vlastnost AUTO_INCREMENT. Ta zabezpečí, že MySQL bude při vložení nového záznamu do tabulky do tohoto pole automaticky zapisovat jednoznačnou hodnotu.

Zobrazení seznamu tabulek

Zobrazení seznamu tabulek v dané databázi provede příkaz show tables.

mysql> show tables;
+--------------------+
| Tables_in_knihovna |
+--------------------+
| kartoteka |
+--------------------+
1 row in set (0.01 sec)

Zobrazení struktury tabulky

Seznam polí tabulky a jejich vlastností zobrazí příkaz show columns.

mysql> show columns from kartoteka;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | | PRI | NULL | auto_increment |
| autor | varchar(50) | YES | | NULL | |
| titul | varchar(100) | YES | | NULL | |
| poznamka | text | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.11 sec)

Úprava tabulky

Pro úpravu tabulky se použije standardní SQL příkaz alter table.

mysql> alter table kartoteka
-> modify autor char(100);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

V této ukázce jsme upravili délku textového pole autor z původních 50-ti na 100 znaků.

Odstranění tabulky

Tabulku z databáze odstraní příkaz drop table.

mysql> drop table kartoteka;
Query OK, 0 rows affected (0.00 sec)

Manipulace se záznamy

Pro manipulaci se záznamy v tabulce se používají SQL příkazy. Jejich použití zobrazují následující ukázky.

Vložení nového záznam

Pro vložení nového záznamu do tabulky se použije SQL příkaz INSERT.

Příklad přidání záznamu do naší tabulky kartoteka.

mysql> insert into kartoteka
-> (autor, titul)
-> values
-> ('Jules Verne', 'Doktor OX')
-> ;
Query OK, 1 row affected (0.00 sec)

Zobrazení záznamů v tabulce

Záznamy uložené v tabulce zobrazí SQL příkaz SELECT.

Příklad:

mysql> select * from kartoteka;
+----+-------------+-----------+----------+
| id | autor | titul | poznamka |
+----+-------------+-----------+----------+
| 1 | Jules Verne | Doktor OX | NULL |
+----+-------------+-----------+----------+
1 row in set (0.10 sec)

Tento příkaz zobrazí všechny záznamy v tabulce. Pro upřesnění výběru se musí použít klauzule WHERE.

Úprava záznamu v tabulce

Úpravu záznamů v tabulce provede SQL příkaz UPDATE.

Příklad úpravy záznamu v tabulce kartoteka.

mysql> update kartoteka
-> set
-> poznamka = 'próza'
-> where id = 1
-> ;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Pro upřesnění záznamu, který chceme upravit, jsme použili klauzuli WHERE.

Odstranění záznamu z tabulky

Odstranění záznamu z tabulky provede SQL příkaz DELETE.

Příklad:

mysql> delete from kartoteka
-> where id = 1;
Query OK, 1 row affected (0.02 sec)

Pro upřesnění záznamu, který se má odstranit, jsme opět použili klauzuli WHERE.

PHP a MySQL

V  poslední části této kapitoly se podíváme na spojení PHP a MySQL. PHP obsahuje řadu funkcí, které umožní jak manipulovat se záznamy, které jsou uložené v tabulkách databází, tak umožňují spravovat databáze a tabulky.

Pro manipulaci s daty v PHP skriptu musíme provést následující kroky:

  1. Připojit se k MySQL serveru
  2. Vybrat databázi
  3. Vykonat SQL příkaz
  4. V případě, že SQL příkaz bude vracet data z tabulky (SQL příkaz SELECT), zobrazit data v PHP skriptu
  5. Ukončit připojení k MySQL serveru

Připojení k MySQL serveru

Připojení k MySQL serveru realizuje funkce MySQL_Connect().

MySQL_Connect ("jméno_serveru", "jméno_uživatele", "heslo");

Parametr jméno_serveru obsahuje jméno nebo IP adresu MySQL serveru. V případě, že MySQL server očekává příchozí požadavky na jiném portu, než je port 3306, zadá se číslo odpovídajícího portu v rámci jména serveru. Oddělovačem jména serveru a portu je dvojtečka, například localhost:13306. Parametr jméno_uživatele obsahuje jméno uživatele MySQL serveru, Parametr heslo pak jeho přístupové heslo.

Příklad:

$spojeni = MySQL_Connect ("localhost", "root", "");

Připojení k MySQL serveru, který běží na stejném počítači jako WWW-server Apache se skriptovacím jazykem PHP.

Přiřazení spojení do proměnné je nutné v případě, kdy se bude v PHP skriptu používat více spojení k různým MySQL serverům. Proměnná, která bude odkazuje na určité spojení, se pak bude přidávat jako parametr k  funkcím pro práci s MySQL. V případě, že v PHP skriptu se bude používat pouze jediné spojení k MySQL serveru, nemusí se výsledek funkce MySQL_Connect přiřazovat proměnné.

Výběr databáze

Po úspěšném připojení musíme vybrat databázi, která obsahuje tabulky, s kterými budeme pracovat. Výběr databáze provede funkce MySQL_Select_DB().

MySQL_Select_DB ("jméno_databáze", spojení);

Parametr jméno_databáze obsahuje jméno požadované databáze. Parametr spojení obsahuje odkaz na spojení s konkrétním MySQL serverem. Tento parametr je nepovinný. Není-li zadán, bude se databáze vybírat z naposled vytvořeného spojení.

Příklad:

$databaze = MySQL_Select_DB ("knihovna");

Přiřazení výběru databáze do proměnné má podobný význam jako v případě přiřazení spojení. Opět se použije, když se v PHP skriptu bude pracovat s více databázemi.

Vykonání SQL příkazu

Vykonání SQL příkazu provede funkce MySQL_Query().

MySQL_Query ("SQL_příkaz", spojení);

Tato funkce obsahuje dva parametry. Prvním parametrem je SQL_příkaz, který obsahuje SQL příkaz. Druhým, nepovinným, je opět odkaz na spojení s konkrétním MySQL serverem.

$data = MySQL_Query ("SELECT * FROM kartoteka", $spojeni);

SQL příkaz se bude vykonávat v rámci aktivní databáze, která byla vybraná funkcí MySQL_Select_DB.

Bude-li SQL příkaz vracet data z tabulky, jako v našem případě příkaz SELECT, musí se výsledek této funkce přiřadit proměnné.

Zobrazení dat z SQL příkazu v PHP skriptu

Zobrazit data, která vrací SQL příkaz můžeme několika způsoby.

Prvním způsobem je použití funkce MySQL_Result().

MySQL_Result(data, záznam, položka)

SQL příkaz SELECT vrací sadu záznamů, která svoji strukturou odpovídá struktuře tabulky. Sada záznamů je rozdělena do sloupců, které odpovídají sloupcům tabulky definovaných v SQL příkazu SELECT. Každý záznam se nachází na samostatné řádce. Číslování řádek začíná hodnotou 0. Funkce MySQL_Result() tedy vrací hodnotu daného pole na konkrétní řádce.

Příklad:

echo MySQL_Result($data, 0, "autor")

V tomto příkladě bude zobrazena hodnota pole autor na první řádce sady záznamů $data.

Počet vrácených řádek v sadě záznamů zobrazí funkce MySQL_Num_Rows().

MySQL_Num_Rows(data)

Tato funkce vrací celé číslo, které odpovídá počtu řádek v sadě záznamů. Neobsahuje-li záznam žádný řádek, to znamená, že příkaz SELECT nenašel odpovídající záznam v tabulce, vrátí funkce hodnotu 0.

Využití funkce si ukážeme na následujícím příkladu, ve kterém zobrazíme všechny záznamy:

for ($i=0; $i < MySQL_Num_Rows($data); $i++) {
echo "Autor:" . MySQL_Result($data, $i, "autor");
echo "<br>";
echo "Titul: " . MySQL_Result($data, $i, "titul");
echo "<hr>";
}

Druhým způsobem, jak načíst data, je uložení záznamu do proměnné typu pole. K tomu nám poslouží funkce MySQL_Fetch_Row() nebo funkce MySQL_Fetch_Array().

MySQL_Fetch_Row(data)

MySQL_Fetch_Array(data)

Rozdíl mezi funkcemi je pouze v typu pole, které bude vytvořeno.

Funkce MySQL_Fetch_Row() načte jeden záznam do proměnné typu pole. Indexem prvků pole jsou celá čísla, jejichž hodnoty odpovídají pořadí jednotlivých položek v záznamu.

Příklad:

while ($zaznam = MySQL_Fetch_Row($data)) {
echo "Autor:" . $zaznam[1];
echo "<br>";
echo "Titul: " . $zaznam[2];
echo "<hr>";
}

Funkce MySQL_Fetch_Row()načte jeden záznam do asociovaného pole. Indexem prvků pole jsou jména položek záznamu.

Příklad

while ($zaznam = MySQL_Fetch_Array($data)) {
echo "Autor:" . $zaznam["autor"];
echo "<br>";
echo "Titul: " . $zaznam["titul"];
echo "<hr>";
}

Ukončení připojení k MySQL serveru

Po zpracování požadavku MySQL serverem je vhodné ukončit s ním spojení. Spojení je sice uzavřeno při ukončení skriptu, ale někdy může nastat situace, že skript bude po zpracování požadavků dále pokračovat, a spojení by tak zbytečně alokovalo systémové zdroje počítače.

K uzavření spojení slouží funkce MySQL_Close().

MySQL_Close (spojení)

Parametr spojení není povinný. Není-li uveden, je vždy uzavřeno naposled vytvořené spojení.

Příklad:

MySQL_Close ($spojeni)

Před ukončením spojení je vhodné uvolnit sadu záznamů, které vrátil SQL příkaz SELECT z paměti počítače. Záznamy uvolní funkce MySQL_Free_Result().

MySQL_Free_Result (data);

Parametr data opět není povinný. Není-li uveden, jsou uvolněny z paměti záznamy naposled vytvořené sady záznamů.

MySQL_Free_Result ($data);

V našem příkladě byly uvolněn záznamy, na které se odkazovala proměnné $data.

Některé další funkce pro práci s MySQL serverem

·        MySQL_Affected_Rows() - Funkce vrací počet záznamů, které byly SQL příkazem ovlivněny. V případě příkazu SELECT se jedná o počet vrácených záznamů.

·        MySQL_Create_DB() - Funkce vytvoří databázi.

·        MySQL_Drop_DB() - Funkce zruší databázi.

·        MySQL_ErrNo() - Funkce vrátí návratový kód naposled vykonané funkce pro práci s MySQL.

·        MySQL_Error() - Funkce vrátí chybovou zprávu naposled vykonané funkce pro práci s MySQL.

·        MySQL_InsertId() - Funkce zobrazí jednoznačné celé číslo, které bylo přiděleno novému záznamu v tabulce. Položka v záznamu, která bude obsahovat jednoznačnou identifikaci, musí mít nastavenou vlastnost AUTO_INCREMENT.

Přehled všech funkcí pro práci s MySQL databází naleznete v dokumentaci, například na http://www.php.net/manual/cs/ref.mysql.php.

Vše v jednom příkladu

Na závěr této části a vlastně i celé kapitoly si ještě jednou zobrazíme použité příklady tak, jak by vypadaly v našem PHP skriptu knihovna.php.

Nejdříve si vytvoříme spojení s MySQL serverem, který běží na lokálním počítači. Dalším krokem je výběr databáze knihovna a provedení SQL příkazu SELECT * FROM kartoteka. Záznamy, které příkaz SELECT vybere, zobrazíme pomocí funkce MySQL_Result(). Pohyb po jednotlivých záznamech se provede pomocí příkazu for. Na závěr zpracování uvolníme záznamy z paměti a ukončíme spojení s MySQL serverem.

Příklad:

<HTML>
<HEAD>
<TITLE>Knihovna</TITLE>
</HEAD>

<BODY>
<h1>Knihovna</h1>
<h2>Seznam knih</h2>
<?

// Vytvoreni spojeni, vyber databaze a provedeni SQL prikazu
$spojeni = MySQL_Connect ("localhost", "root", "");
$databaze = MySQL_Select_DB ("knihovna", $spojeni);
$data = MySQL_Query ("SELECT * FROM kartoteka", $spojeni);

echo "<hr>";

// Zobrazeni vracenych hodnot
for ($i=0; $i < MySQL_Num_Rows($data); $i++) {
echo "<p><b>Autor: </b>" . MySQL_Result($data, $i, "autor");
echo "<br>";
echo "<b>Titul: </b>" . MySQL_Result($data, $i, "titul");
echo "</p>";
}
echo "<hr>";

// Uvolneni zaznamu z pameti a ukonceni spojeni
MySQL_Free_Result ($data);
MySQL_Close ($spojeni);

?>
</BODY>

</HTML>

Po zadání URL adresy http://localhost/knihovna/knihovna.php se zobrazí tento HTML dokument.

Obrázek: Vygenerovaný dokument

Pro názornost si zobrazíme i jeho zdrojový kód:

<HTML>
<HEAD>
<TITLE>Knihovna</TITLE>
</HEAD>

<BODY>
<h1>Knihovna</h1>
<h2>Seznam knih</h2>
<hr>
<p><b>Autor: </b>kolektiv<br>
<b>Titul: </b>PHP Programujeme profesionálně</p>
<p><b>Autor: </b>Jakub Mach<br>
<b>Titul: </b>PHP pro úplné začátečníky</p><hr>
</BODY>

</HTML>

Touto ukázkou jsme ukončily stručné seznámení s prostředím Apache, PHP a MySQL, které umožní za cenu nízkých (téměř žádných) pořizovacích nákladů vytvořit rozsáhlé aplikace pro prostředí Internetu a Intranetu.


[ nahoru ]

 
Pocet navstev: 110826