Michal Čihař - Blog Archives for phpMyAdmin

Vlastní témata

Nelíbí se vám žádné z nabízených témat phpMyAdmina a máte zkušenosti s vytvářením grafiky pro web? Tak si vytvořte vlastní téma!

Vytvořit vlastní téma je celkem jednoduché, téma se skládá z definované sady obrázků, tří souborů definující CSS, screenshotu a dvěmi PHP soubory s informacemi o tématu. Pokud ovšem jsme příliš líní, můžeme si stáhnout již hotová témata ze stránkek projektu a vycházet při úpravách z nich.

Základní informace o tématu – jeho název, který se zobrazí uživateli a verze phpMyAdmina se kterou je kompatibilní, se nacházejí v souboru info.inc.php :

 
  <?php
$theme_name = 'Moje téma';
$theme_full_version = '2.9';
?>
 

Pokud je verze starší než aktuálně používaná, pokusí se phpMyAdmin aplikovat na CSS změny, ke kterým mezitím došlo. Nicméně toto pravděpodobně nebude přestě to, co by udělal autor a proto je vhodné téma při každé nové verzi revidovat.

Ve starších tématech můžete místo $theme_full_version nalézt proměnné $theme_version a $theme_generation , které se dříve používaly pro určení verze. Témata v rámci jedné generace by měly být zpětně kompatibilní (dochází například k přidání obrázků nebo css tříd), rozdílné generace témat mohly být naprosto odlišné. Protože ale toto značení bylo pro uživatele nepřehledné, nyní se preferuje zapsání kompatibilní verze.

Dalším PHP skriptem je soubor layout.inc.php . Ten obsahuje konfigurovatelné nastavení tématu, které může uživatel změnit bez přímého zásahu do tématu (například šířka navigačního rámu nebo použité písmo). Co umožní téma konfigurovat záleží na autorovi, ale doporučujeme držet se originálních témat.

CSS styly nastavíme v souborech v adresáři css. Tyto soubory jsou tři, po jednom pro levý a pravý rámec a jeden pro tisk: theme_left.css.php , theme_right.css.php a theme_print.css.php . Mohou to být jen čistě css soubory nebo využít i možností php a v něm použít konfigurace ze souboru layout.inc.php a předdefinovaných proměnných pro detekci různých prohlížečů. Pro popis jednotlivých tříd je nejlepší se podívat do existujících témat, komplexní dokumentace zde bohužel chybí.

Nejnáročnější část tématu na vytvoření je asi sada obrázků. Protože většina akcí je znázorněna ikonkou, je obrázků je poměrně hodně (v současné verzi 115). Nicméně i zde je možné si práci ušetřit použitím ikon z existujícího tématu (takto ostatně vznikla i většina témat, které jsou k phpMyAdminovi k dispozici).

Po vytvoření a vyladění všech těchto souborů vytvoříme ještě malý screenshot screen.png , aby uživatel viděl, jak naše téma vypadá a můžeme ho rozšířit do světa pomocí trackeru na webu projektu.

Aktualizace phpMyAdmina

Aktualizace aplikace na novou verzi v produkčním prostředí občas může způsobit značné problémy. Jaká úskalí vás mohou potkat při aktualizaci phpMyAdmina?

Přechod na novou verzi

phpMyAdmin již mnoho verzí počítá se snadnou možností aktualizace a tak jediná věc, která je obvykle potřeba je překopírování konfiguračního souboru config.inc.php do nové verze. Pokud jste však z nějakých důvodů používali prehistorickou verzi phpMyAdmin 2.3.0, budete muset konfigurační soubor převést do nového formátu (skript scripts/convertcfg.pl vám v tom bude nápomocen). Nyní můžete novou verzi vyzkoušet a vše by mělo fungovat.

Změny nastavení mezi verzemi

Jak již bylo řečeno, není potřeba při aktualizaci phpMyAdmina měnit jeho nastavení. Nicméně přesto může být zásah do konfiguračního souboru config.inc.php užitečný, protože nové verze přidávají nové vlastnosti, které třeba budete chtít využít. Tyto paramtery jsou popsané v  dokumentaci a jejich výchozí hodnoty naleznete v souboru libraries/config.default.php . Tento soubor nepoužívejte jako config.inc.php , jeho použití může mít za následek nefunkčnost při přechodu na další verzi. Pokud vám výchozí hodnoty vyhovují, není potřeba nic měnit, automaticky se použijí, jinak vložte tuto konfigurační volbu do svého konfiguračního souboru.

Témata

Vaše stará témata nemusí být kompatibilní s novou verzí. I když se phpMyAdmin v současné době snaží být kompatibilní i se staršími verzemi témat, někdy jsou změny v rozhraní příliš velké a stará témata prostě nebudou vypadat dobře. V tomto případě vám nezbyde než čekat na vydání nové verze tématu nebo provést potřebné změny pro docílení dobrého vzhledu vlastními silami.

Nastavení přístupu k MySQL serverům

phpMyAdmin není omezen jen na použití s jediným MySQL serverem. Základní nastavení pro jeden server již bylo popsáno dříve, teď je na čase postoupit k nastavení pro složitější konfigurace a podrobněji popsat možnosti, které phpMyAdmin nabízí.

Typ přihlášení

Základní možnosti přihlašování byly stručně popsány dříve , ale jejich výhody a nevýhody si teď ještě probereme podrobněji. Volba typu přihlášení se do konfiguračního souboru píše následovně:

 
  $cfg['Servers'][$i]['auth_type'] = 'typ';
 

config

Připojení je nadefinované v konfiguračním souboru, omezení přístupu by mělo být zajištěno jiným způsobem. Pokud používáme phpMyAdmina jen na lokálním počítači, může se jednat o nejpohodlnější variantu.

cookie

Přihlašování pomocí koláčků, kdy se uživatel přihlašuje stejným uživatelským jménem a heslem jako do MySQL. Autentizace tedy necháváme na MySQL serveru se všemi výhodami a nevýhodami, které z toho plynou. Pozor například na zpřístupnění všech účtů vzdáleně, tedy i těch, které jsou v MySQL povoleny jen z lokálního počítače.

Heslo se do koláčků ukládá šifrované klíčem uloženém na serveru ( $cfg['blowfish_secret'] ), čímž se poněkud snižuje riziko útoku v případě ukradení koláčku (ale není mu zabráněno úplně, takže dodržovat nějaké bezpečnostní zvyklosti je pořád potřeba).

Jedná se asi o nejpoužívanější volbu a kromě pevně definovaného MySQL serveru umožňuje také uživateli zadat libovolný MySQL server po nastavení:

 
  $cfg['AllowArbitraryServer'] = TRUE;
 

Pozor však pokud phpMyAdmin běží na web serveru za firewallem, v tomto případě může uživatel získat při povolení zadání libovolného serveru i přístup k interním MySQL serverům, ke kterým by jinak přístup neměl.

http

HTTP přihlašování je dost podobné přihlašování pomoci koláčků, platí pro ni téměř to samé. Jen není možné provést plnohodnotné odhlášení (HTTP autentizace toto neumožňuje) a heslo na straně klienta není ukládáno šifrovaně.

signon

Tato metoda je určena pro integraci phpMyAdmina do jiných systémů, kdy se uživatel přihlašuje heslem do jiného systému a ten phpMyAdminovi při vstupu do něj předá přístupové údaje do MySQL. Podrobněji se implementaci tohoto typu budu věnovat v některém s dalších článků, takže vás zatím jen odkážu na anglický popis na wiki .

Parametry připojení

Většina parametrů připojení asi není potřeba moc popisovat a jejich názvy celkem vypovídají co asi daná volba dělá:

 
  $cfg['Servers'][$i]['host'] = 'mysql.example.net';
$cfg['Servers'][$i]['port'] = '4242';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['ssl'] = false;
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';
 

V případě, že MySQL provozujete na standardním portu (nebo soketu v případě lokálního počítače), jediné co opravdu potřebujete nastavit je $cfg['Servers'][$i]['host'] . V případě novějšího PHP je také vhodné nastavit používané rozšíření PHP na mysqli :

 
  $cfg['Servers'][$i]['extension'] = 'mysqli';
 

Více serverů

Více serverů není pro phpMyAdmina žádným problémem. Jistě jste si všimli $i zadávaného ve všech konfiguračních parametrech. Touto proměnou je možné nadefinovat libovolné množství serverů, ze kterých si uživatel bude moci vybra. Proměnná se používá místo přímého udání čísla pro snadnější případný přesun serverů nebo kopírování parametrů. Konfigurace pro více serverů pak v podstatě jen spočívá v kopírování a upravování parametrů pro jednotlivé servery. Například tedy může vypadat takto:

 
  /* Servers configuration */
$i = 0;

/* Server localhost (config:root) [1] */
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'mysql';

/* Server localhost (config:franta) [2] */
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'franta';
$cfg['Servers'][$i]['password'] = 'heslo';
 

Ve výchozím nastavení se phpMyAdmin automaticky pokusí připojit k prvnímu serveru. Pokud chceme, aby se připojoval k jinému, zadáme jeho pořadové číslo do proměnné $cfg['ServerDefault'] , pokud chceme aby si uživatel nejdříve vybral server, zadáme nulu:

 
  $cfg['ServerDefault'] = 0;
 

Rychlá instalace

Chcete si phpMyAdmina nainstalovat a nevíte jak na to? Tento článek vysvětlí základní pojmy a provede vás nepříliš komplikovanou instalací.

Odkud instalovat?

Na tuto otázku vám odpoví stránka s odkazy na stáhnutí . Pokud se rozhodnete použít distribuční balíček (což vám doporučuji pokud je to možné), budete mít trochu usnadněnou cestu, ale umístění některých souborů se může lišit. V případě některého s instalačních balíčků pro Windows už nejspíš bude phpMyAdmin rovnou nastaven a v tomto článku se moc zajímavých informací nedozvíte :-).

Co potřebujete?

Web server s podporou PHP, MySQL server a samozřejmě prohlížeč WWW stránek (nejlépe s podporou javascriptu a CSS).

Co phpMyAdmin obsahuje?

Po rozbalení staženého archívu (nezapomeňte rozbalit včetně adresářů) získáte spoustu souborů a adresářů. Jako uživatele vás většina z nich nemusí zajímat, takže popíšeme jen ty nejdůležitější. Kořenový adresář obsahuje soubor Documentation.html , což je dokumentace k verzi, kterou jste si právě nainstalovali (téměř jistě se bude lišit od odkazovaného dokumentu, který je pro poslední vývojovou verzi). V tomto adresáři dále nalezneme ukázkový soubor konfigurace config.sample.inc.php , který můžeme použít pro vytvoření konfiguračního souboru config.inc.php . Ale nebojte se, existuje i jednodušší způsob nastavení. Tento soubor je PHP skriptem, proto při jeho úpravách dbejte na zachování syntaxe PHP.

V adresáři scripts pak nalezneme různé užitečné skripty. Například create_tables.sql pro vytvoření tabulek pro rozšíření možností phpMyAdmina , nebo setup.php , který použijeme pro nastavení.

Rychlé nastavení

Již nějaký ten pátek obsahuje phpMyAdmin skript pro nastavení. Pokud ho spustíte , asi dostanete podobná varování jako na ukázkovém serveru. Nemožnost uložení konfigurace na serveru ničemu nevadí, stále si můžete konfigurační soubor stáhnout, HTTPS připojení doporučuji použít pokud to je možné, zabráníte tím přenášení vašich nezašifrovaných hesel po internetu.

Co všechno je potřeba nastavit? V podstatě jen připojení k serveru. V sekci „Servers“ klikneme na tlačítko „Add“ a můžeme zadat parametry připojení. Vhodné rozšíření pro připojení k MySQL je automaticky zjištěno, tak nám pro zatím stačí zvolit typ přihlašování (viz článek o  instalaci a zabezpečení , doporučuji cookie ) a jméno serveru (případně port nebo soket pokud používáme nestandardní hodnoty).

Po kliknutí na zelené tlačítko „Add“ konfigurační skript zkontroluje zadané hodnoty a a zobrazí nám přehled současné konfigurace. Nyní můžete projít i další možnosti nastavení, ale pro připojení k MySQL serveru už víc nepotřebujete.

Stačí tedy v sekci „Configuration“ zvolit tlačítko „Download“, stáhnout konfiguraci a umístit jí jako config.inc.php do kořenového adresáře phpMyAdmina. Nyní by se nám po přístupu na hlavní stránku phpMyAdmina měla objevit přihlašovací obrazovka jako na ukázkovém serveru .

Do roka a půl...

Aneb nikdy neříkej nikdy. Před rokem a půl jsem slavnostně ohlašoval konec místního blogu . Za ten rok a půl jsem z abclinuxu úplně nezmizel nikdy, jenom prostě už tomu nevěnuji tolik času jako dřív. Poslední dobou ovšem nějak občas mám potřebu se k něčemu vyjádřit v češtině a chybí mi pro to vhodný prostor. A to i přesto, že kromě vlastního anglicky psaného blogu jsem si začal psát články na vlastní portál o phpMyAdminovi (kde je sice ještě na dlouho o čem psát, ale přecejenom už mám články na nejbližší měsíc hotové, tak to už člověk ztrácí motivaci :-)).

Blog dnes nabízí skoro každý druhý portál v ČR, ale zakládat další blog mi nějak přijde zbytečné, zas tak moc toho snad produkovat nebudu :-). Tak mě tu teda máte zpátky. Předpokládám, že za další veřejné prohlášení na téma svého blogu, opět dostanu vynadáno, tak jako se tomu stalo před rokem a půl, ale co se dá dělat…

Za ten rok a půl jsem se rozhodně nenudil, kromě práce (která mě teď zavála do Japonska) zbývá čas i na další věci. Za chvíli už to bude rok, co jsem se v Gammu stal z řadového vývojáře vrchním údržbářem . Během údržby zjišťuji čím dál tím víc, že dnešní doba chce něco úplně jiného a dokonce jsme pro to začali i zpracovávat návrh, ale na víc zatím nebyl čas (o tomto ještě v dohledné době nějaký PR blog post napíšu).

Když koncem letošního roku klesly ceny českých domén, rozhodl jsem se, že je na čase zkusit oživit můj dlouholetý nápad s portálem věnujícím se phpMyAdminovi . Po měsíci a půl provozu nemůžu říct. že by se jednalo o propadák, ale není to ani nijak hyper úspěšný web. Nicméně s ohledem na prostředky vynaložené na reklamu (nic) to je celkem dobré :-). Zatím mám o čem psát (teda spíš jsem laťku s frekvencí publikování nastavil dostatečně nízko, takže stíhám), tak teď musím počkat až se články ve výsledcích Googlu probojují na vyšší pozice a uživatelé je najdou. České vyhledávače jsou v tomto na nic, asi je už nikdo nepoužívá :-).

Hmm nějak jsem se rozepsal, to by pro začátek mohlo stačit, pokračování někdy příště.

Další možnosti generování dokumentace phpMyAdminem

Před týdnem jsme se dozvěděli jak získat PDF s popisem databáze, dnes se podíváme jaké jsou další možnosti generování dokumentace v phpMyAdminovi.

Datový slovník

Dalším užitečným výstupem, je datový slovník, se kterým jsme se již potkali v PDF výstupu. Nalezneme ho opět na stránce se základními informacemi o databázi . Jeho výstupem je HTML stránka se stručným přehledem tabulky , kterou můžeme případně zkopírovat do naší dokumentace.

Exporty

Pro začlenění struktury tabulky do dalších dokumentů ale může být vhodnější použít exportní funkce . Pokud zvolíme možnost exportovat jen strukturu tabulek, dostaneme v požadovaném formátu dokumentaci vybraných tabulek z databáze. Z formátů pro export si snad vybere každý ten svůj oblíbený – LaTeX, OpenDocument, Microsoft Office nebo třeba PDF.

Další možnosti

Kromě těchto možností má většina stránek možnost přepnutí do náhledu pro tisk, který také může být vhodný pro začlenění do dokumentace. Tak můžeme třeba získat přehled o  celé databázi nebo tabulce popřípadě z libovolného SQL dotazu. Přehled o vybraných tabulkách z databáze získáme na stránce s  přehledem databáze zaškrtnutím požadovaných tabulek a vybráním funkce „Náhled pro tisk“.

Zobrazení relací v PDF

Minulý týden jsme se naučili vytvořit vztahy mezi tabulkami a jak je používat při práci s tabulkami. Když už ale tyto údaje máme zadané, můžeme je použít i na další užitečné věci. Dnes se podíváme na různé možnosti dokumentace databáze pomocí phpMyAdmina.

V dnešním díle budeme hojně využívat ukázkovou databázi MySQL – sakila . Tu si můžete stáhnout a objevovat na ní možnosti MySQL a případně i phpMyAdmina. Pokud na ukázkovém serveru databáze není, pravděpodobně jí někdo z uživatelů poškodil a do 20 minut by měla být automaticky obnovena.

V dokumentaci je vhodné mít schéma databáze. Proč toto schéma vytvářet ručně, když všechny podstatné informace již jsou v databázi? phpMyAdmin nám tyto informace dovolí použít a vytvořit z databáze schéma ve formě PDF souboru. Ukázku, jak může PDF výstup vypadat naleznete jako přílohu článku, ale nebudeme předbíhat, vytvořit takovýto dokument je jednoduché. Odkaz pro úpravu stránek PDF se tísní úplně dole na stránce úpravy databáze .

Po kliknutí na odkaz se nám zobrazí stránka pro editaci PDF . Kromě existujících stránek (pokud nějaké existují) můžeme vytvořit nové. Poměrně užitečná je možnost automatického rozložení, kdy phpMyAdmin automaticky navrhne rozložení všech tabulek. Jak se u této ukázkové databáze můžete přesvědčit, automatické rozložení není vždy optimální, tak můžete využít editace umístění tabulek přímo na této stránce. Buďto můžeme přímo zadat souřadnice, kde budou jednotlivé tabulky zobrazeny, nebo zapnout grafický návrh a polohu jednotlivých tabulek upravit myší. Kromě tohoto rozhraní, kde nejsou vidět relace mezi tabulkami, můžeme použít i  návrháře , který umí import a export souřadnic z PDF stránek.

Poté co jsme s náhledem spokojeni, můžeme vygenerovat PDF dokument s grafem se závislostmi. Na první pokud asi budeme u rozsáhlejší zklamáni a bude potřeba pozice tabulek trochu poupravit, ale tuto operaci provádíme jen jednou. PDF dokument můžeme vygenerovat jak na stránce, kde PDF upravujeme, tak v
úpravách databáze . Možnosti nastavení výstupu snad nepotřebují podrobnější popis. Dnes jsme se naučili vytvořit PDF a za týden se podíváme na další možnosti výstupu.

Přílohy:

Relace aneb ušetřete si práci

Relace jsou mocným nástrojem ve světě databází, které nám umožní udržovat konzistentní tabulky, které na sebe navzájem odkazují. MySQL podporu pro relace má jen pro některá úložiště a pokud používáme výchozí MyISAM, tak jsme o tuto možnost ochuzeni. Nicméně phpMyAdmin přesto umožní relace mezi tabulkami používat díky vlastnímu zpracování relací.

Pokud nepoužíváte úložiště podporující relace, je potřeba pro používání internách relací mít v phpMyAdminovi nastaveno používání rozšířených možností . Pokud relace vaše úložiště přímo podporuje (například InnoDB), můžete bez obav tuto část pro tuto chvíli přeskočit, ale přijdete o jiné zajímavé funkce, které jsou na relace navázány a o kterých budu psát v některém dalším článku.

Relace určuje vztah mezi dvěma sloupci v tabulkách. phpMyAdmin stejně tak jako většina relačních databází podporuje přímo jen relace 1:N, relace N:N musí být prováděny přes pomocnou mapovací tabulku.

Vytváření relací je velmi jednoduché – stačí na vlastnostech tabulky kliknout na odkaz Zobrazit relace a dostaneme se na jednoduchou stránku, která nám umožní relace upravit . V horní části můžeme definovat vztahy mezi sloupci, v dolní potom sloupec, který phpMyAdmin zobrazí, pokud budete procházet tabulku, která odkazuje na nějaký řádek z aktuální tabulky. Pro klasické tabulky obsahující identifikátor (na který bude druhá tabulka odkazovat) a například jméno tedy logicky vybereme jméno.

V čem nám zadání relací usnadní práci? Při vkládání nové položky máme na výběr z hodnot v odkazované tabulce, při procházení si můžeme rovnou otevřít odkazovaný řádek a v neposlední řadě nám na stránce s operacemi přibyde odkaz na kontrolu integrity. To je bohužel také nevýhoda interních relací, phpMyAdmin nemůže vynucovat korektní editaci databáze a proto může dojít k vytvoření odkazů na neexistující položky.

Tento problém je možné vyřešit jen podporou na úrovni MySQL serveru, tedy použitím úložiště, které toto přímo podporuje, například InnoDB. Ta nám nabídne kromě možnosti výběru sloupce i operace, které se mají provést při vymazání a aktualizaci sloupce, ostatně podívejte se sami . Tím MySQL bude vynucovat integritu všech tabulek a budeme mít o starost méně.

Nativní relace v MySQL jsou podporovány na stejné úrovni jako ty interní phpMyAdmina, takže veškeré funkce můžete používat při obou možnostech. Kromě pomocí při editaci a procházení nám správně nadefinované relace můžou usnadnit i generování dokumentace, ale o tom až někdy příště.

Export do formátu NHibernate

phpMyAdmin 3.0 přinese podporu pro další formáty exportu. V SVN je v současné době implementována podpora pro NHibernate . Jedná se techonologii pro ukládání .NET objektů (nejen) do databáze, ale protože .NET opravdu není moje silná stránka, tak podrobnosti hledejte na stánkách o NHibernate. V budoucnu by pomocí stejného pluginu mělo být možné exportovat i ve formátu JSON, ale jeho vznik je teprve v rané fázi vývoje.