Michal Čihař - Blog Archives for phpMyAdmin

Podpora pro Mozilla Prism

Mozilla Prism je technologie pro přímé spouštění webových aplikací u uživatele. Z prohlížeče v tomto případě zmizí ovládací prvky a možnost zadání URL, takže aplikace se více podobá opravdové aplikaci.

Podrobnější popis Prism najdete například ve Wikipedii případně v  blogu Mozilla Labs .

phpMyAdmin 3.0 přinese podporu pro tuto technologii, takže s phpMyAdminem bude možné zacházet jako s desktopovou aplikací. V současné době ještě není podpora kompletní, ale jak to bude vypadat se můžete podívat (pokud máte prohlížeč podporující Prism) na ukázkovém serveru .

Úpravy vzhledu

phpMyAdmin nabízí široké možnosti pro změnu vzhledu. Jednodušší úpravy můžeme udělat pomocí nastavení, kompletní změnu nám pak umožní témata.

Nastavení vzhledu

Levý panel

Levý panel ve výchozím nastavení je optimalizován pro velké množství databází a tabulek. Pokud tabulek máme méně, můžeme použít Javascriptový rozbalovací strom. To usnadní přechod mezi tabulkami v různých databázích.

 
  $cfg['LeftFrameLight'] = FALSE;
 

Pokud již máme stromovou strukturu, je možné jí ještě rozšířit na úrovni tabulek. To se obzvlášť hodí, pokud máme jedinou databázi a v ní mnoho tabulek, které patří k různým projektům. Aby toto bylo možné, musí být tabulky patřící k sobě pojmenovány s předponou, například pma_cosi. Nastavením $cfg[‚LeftFra­meTableSepara­tor‘] na znak (nebo řetězec) oddělující onu příponu budeme mít tabulky strukturované podle projektů:

 
  $cfg['LeftFrameTableSeparator'] = '__';
 

V levém panelu pak můžeme vidět například následující strom:

Úpravy a procházení tabulek

Při vytváření tabulky se ze zapnutými transformacemi zobrazuje mnoho položek a obvykle se nevejdou na obrazovku. Toto zobrazení je možné otočit o devadesát stupňů, takže parametry jednoho sloupce budou zobrazeny pod sebou a zaberou méně místa. Po nastavení

 
  $cfg['DefaultPropDisplay'] = 'vertical';
 

tedy získáme:

Příliš dlouhý text se při procházení tabulek zkracuje na 50 znaků, což může být v mnoha situacích na škodu, vždy při prohlížení tento limit můžeme obejít pomocí tlačítka nebo ho lze nastavít konfigurační volbou

 
  $cfg['LimitChars'] = 100;
 

Stejně tak při úpravách polí CHAR a VARCHAR může být pole typu input příliš malé, tak ho můžeme nahradit polem textarea, které nám umožní i zadávat text obsahující více řádek:

 
  $cfg['CharEditing'] = 'textarea';
 

V konfiguraci můžeme ovlivnit i velikost editačních polí ($cfg[‚CharTex­tareaCols‘] a $cfg[‚CharTex­tareaRows‘]) a také jejich automatické označování ($cfg[‚Textare­aAutoSelect‘]), které, obzvláště s automatickým kopírováním do schánky, obvykle působí uživatelům používajícím XWindows víc škody než užitku.

Témata

Zásadnější změnu vzhledu můžeme docílit pomocí témat. Téma můžeme buďto stáhnout se stránek s tématy , nebo si vytvořit vlastní. Tvorba vlastního tématu bude popsána později, tentokrát se zaměříme jen na instalaci tématu. Témat je k dispozici poměrně hodně, ale žádné se zatím neodhodlalo k zásadnější změně rozhraní a všechna se drží zažitého stylu phpMyAdmina, takže můžete vybírat podle barevných preferencí. Při výběru je potřeba také pamatovat na kompatibilitu tématu. Témata se s každou verzí trochu mění a použít nekompatibilní téma by znamenalo problémy se zobrazováním, proto vám je phpMyAdmin ani neumožní vybrat.

Instalace tématu je jednoduchá, stačí rozbalit archív s tématem do adresáře themes a pak již jen vybrat v phpMyAdminovi . Pokud na seznamu svoje právě nainstalované téma nevidíte, pravděpodobně jste vybrali nekompatibilní ver­zi.

Podpora oddílů

Kromě pravidelných pondělních článků o používání phpMyAdmina zde také budou ve čtvrtek vycházet články o novinkách ve vývojové verzi. Protože rychlost vývoje nelze ovlivnit, bude také četnost těchto článků náhodná.

Dnes se podíváme na podporu nové vlastnosti MySQL 5.1 – oddíly tabulek.

MySQL 5.1 přichází z možností rozdělit tabulku na fyzické oddíly, které jsou samostatně uložené v souborech. To umožní lépe rozložit zátěž (třeba umístěním každého souboru na jiný disk) nebo například stará archivovaná a málo používaná data ukládat samostatně (na pomalejší disky). Prostě při vhodném nastavení může být vliv na rychlost výběru z velké databáze značný. Podrobnější popis této funkce najdete v  dokumentaci MySQL .

Do vývojové verze phpMyAdmina byla přidána základní podpora pro tuto funkci. Protože možnosti definice jsou poměrně rozsáhlé, phpMyAdmin se zatím nesnaží nabídnout žádné komfortní rozhraní pro editaci, ale jen textové pole, ve kterém může uživatel zadat definici oddílů. Ostatně můžete si to vyzkoušet na demo serveru .

Základy používání - práce s databázemi a vytváření tabulek

Základní používání phpMyAdmina je velmi jednoduché, ale protože je používán v internetovém prohlížeči, je také trochu odlišné od nativních aplikací. V tomto díle se podíváme podrobněji na práci s databázemi a vytváření tabulek.

Rohraní je opticky rozděleno na dvě části – levý sloupec, ve kterém je seznam databází a tabulek a některé ovládací prvky a zbývající pravá část, kde se odehrává veškerá manipulace s daty. Na první stránce můžeme provést některá nastavení, provádět administraci MySQL a také zde jsou odkazy na dokumentaci (která je jen v angličtině).

Můžeme zde vytvořit databázi (pokud pro to máme oprávnění), zobrazit informace o serveru a provést různá nastavení rozhraní. Ve starších verzích MySQL není možná volba znakových sad, protože to tyto verze nepodporovaly. Dále si zde můžeme zvolit jazyk (z 50 podporo­vaných) nebo nastavit jiný vzhled rozhraní (kromě dvou dodávaných se další dají stáhnout z  phpmyadmin.net ).

Pro základní prohlídku si v levém sloupci vybereme databázi, do které máme přístup (například databáze test) a zobrazí se přehled databáze . V ní si můžeme vytvořit tabulku zadáním jejího jména a počtu sloupců. Pokud máme povolené interní relace nebo pokud používáme úložiště, které relace podporuje nativně, můžeme po vytvoření tabulek nadefinovat vztahy mezi nimi. A to buď pomocí grafického návrháře nebo klasicky vybráním vztahů u jednotlivých tabulek.

Další operace, které můžeme s databází provádět jsou na samostatné stránce Úpravy . Přejmenování a kopírování databáze asi nepotřebuje podrobnější popis, stejně tak výchozí porovnávání pro nové tabulky. Při zapnutých rozšířených možnostech zde můžeme nastavit komentář k databázi a dole na stránce se objeví odkaz na editaci stránek PDF výstupu. Ale o tom se více dozvíte až někdy jindy.

Rozšířené možnosti phpMyAdmina

phpMyAdmin zpřístupňuje nejen funkce MySQL, ale nabízí i mnoho funkcí vlastní. Pro některé z nich je potřebná konfigurace a tu si dnes ukážeme.

Pokud žádné rozšířené funkce nemáme nastavené, phpMyAdmin nás varuje, jak můžete vidět na této stránce dole .

Po kliknutí na dotaz se dozvíme, že není v pořádku databáze pro ukládání těchto dat. phpMyAdmin používá pro ukládání nastavení pro některé funkce (například návrhář tabulek, relace mezi tabulkami, komentáře ke sloupcům, vytváření PDF souborů se strukturou databází a MIME transformace sloupců) vlastní databázi s několika tabulkami.

V případě že připravujeme instalaci pro více uživatelů není vhodné aby k těmto údajům měli přístup všichni uživatelé používající daný MySQL server. Proto vytvoříme nejdříve uživatele, který bude mít k příslušným údajům přístup. Pokud jsme jediným uživatelem, je možné tento krok vynechat. Přihlásíme se do phpMyAdmina jako root a vytvoříme uživatele pma, který bude mít přístup do příslušných tabulek, doporučuji použít SQL příkazy z dokumentace (pro starší verze MySQL je potřeba použít jiné příkazy, ty jsou také uvedeny v dokumentaci):

 
  GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'heslo';
GRANT SELECT (
    Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
    Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
    File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
    Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
    Execute_priv, Repl_slave_priv, Repl_client_priv
    ) ON mysql.user TO 'pma'@'localhost';
GRANT SELECT ON mysql.db TO 'pma'@'localhost';
GRANT SELECT ON mysql.host TO 'pma'@'localhost';
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
    ON mysql.tables_priv TO 'pma'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';
 

Jméno a heslo vytvořeného uživatele uvedeme v konfiguračním souboru:

 
  $cfg['Servers'][$i]['controluser']   = 'pma';
$cfg['Servers'][$i]['controlpass']   = 'heslo';
 

Pro další funkce je potřeba někde ukládat data. Tyto jsou ukládány do tabulek jejichž jména musíme uvést v konfiguraci, pokud nám vyhovují názvy vybrané vývojáři (tabulky jsou vytvořeny v databázi phpmyadmin, uživatel se jmenuje pma), můžeme použít pro jejich vytvoření připravený skript scripts/create_ta­bles.sql (nebo scripts/create_ta­bles_mysql 4 _1_2+­.sql pro MySQL 4.1.2 a vyšší, v phpMyAdminovi 3.0 je jen create_tables.sql, který je pro všechny podporované verze MySQL). Přihlásíme se jako uživatel root, otevřeme stránku pro import , na ní zadáme jméno souboru a provedeme import. O těchto nově vytvořených tabulkách dáme phpMyAdminovi vědět v konfiguračním souboru:

 
  $cfg['Servers'][$i]['pmadb']         = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation']      = 'pma_relation';
$cfg['Servers'][$i]['table_info']    = 'pma_table_info';
$cfg['Servers'][$i]['table_coords']  = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages']     = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info']   = 'pma_column_info';
$cfg['Servers'][$i]['history']       = 'pma_history';
 

Nyní by již mělo varování zmizet a můžeme používat mnoho dalších funkcí. Podrobnosti o nich budou rozebrány někdy příště.

PHP 4 je mrtvé

Nebo by alespoň mělo být. To je přesně poselství iniciativy GoPHP5 . Ta má za cíl donutit poskytovatele služeb nabízet PHP 5 svým zákazníkům. Způsob jakým by toho mělo být dosaženo je poměrně jednoduchý - 5. února 2008 přestanou projekty podepsané pod touto iniciativou podporovat PHP 4. Projektů je pod touto iniciativou podepsáno už požehnaně , namátkou vyberu pár co znám: Gallery, Drupal, Midgard, phpPgAdmin, Typo3 a samozřejmě phpMyAdmin . Začleněním mnoha známých projektů by se snad i mohlo dosáhnout požadovaného efektu, ale uvidíme. Když už se začalo řešit vyhazování kódu pro staré PHP, padlo za oběť i staré MySQL. Takže nová verze 3.0, která vyjde někdy po 5. únoru 2008, bude podporovat už jen PHP 5.2.0 a MySQL 5.0 a novější. Tím se otevřela cesta pro velký úklid kódu, který zajišťoval kompatibilitu s dnes již historickými verzemi obou produktů a také snadnější podpora pro nové funkce. Zároveň se tímto zbavíme jazykových souborů, které nejsou v utf-8, protože ty byly opravdu nutné jen pro starší verze MySQL, které nepodporovaly kódování. Po nějakou dobu bude ještě udržována současná vývojová větev 2.11, která bude podporovat i starší verze, ale nedočká se žádných zásadnějších změn, budou jenom opravovány bezpečnostní a jiné zásadní problémy.

Instalace a zabezpečení

Nainstalovat phpMyAdmina je poměrně jednoduché, ale na co mnoho lidí zapomíná je řádné zabezpečení. Stačí chvíli používat Google a najdete mnoho nezabezpečených instalací phpMyAdmina spoléhajících se na to, že nikdo toto URL neuhodne. Chyba, časem se provalí jakékoliv URL.

Požadavky

Předpokládám, že již máte funkční webový server s podporou php (minimálně verze 4.2.0) a databázi MySQL (minimálně 3.23.32), jejich nastavení zde nebudu rozebírat.

Instalace

Začneme samozřejmě stáhnutím ze stránek projektu a jeho rozbalením nebo instalací balíčku ve vaší distribuci. V případě balíčku z distribuce již pravděpodobně bude phpMyAdmin částečně nastaven. Dále již přistoupíme k modifikaci konfiguračního souboru.

Konfigurační soubor obsahuje několik částí: na začátku je několik základních nastavení, po nich následuje konfigurace serverů a pak mnoho dalších konfiguračních voleb, umožňujících nastavit téměř veškeré chování. Nejdříve upravíme seznam serverů, abychom mohli phpMyAdmina začít používat a pak se budeme věnovat podrobnějším nastavením. Vždy budou uvedeny jen relevantní části konfiguračního souboru, které jsou potřeba pro funkčnost probíraného tématu, v případě nastavovaní serveru je potřeba údaje zadávat do správné části (pro začátek vše k prvnímu serveru), protože phpMyAdmin umožňuje připojit se k více serverům.

Zabezpečení

Jako první věc musíme rozhodnout, jak se budeme k phpMyAdminovi přihlašovat, jestli ho budeme využívat sami nebo i další uživatelé a jestli bude přístupný z více míst.

Pokud se jedná o instalaci na pracovní stanici, můžeme zvolit zadání jména a hesla do konfiguračního souboru:

 
  $cfg['Servers'][$i]['auth_type']     = 'config';
$cfg['Servers'][$i]['user']          = 'uzivatel';
$cfg['Servers'][$i]['password']      = 'heslo';
 

A omezením přístupu pouze z lokálního počítače. Toto je asi nejlepší nastavit přímo ve webového serveru, ale vystačíme si i s phpMyAdminem:

 
  $cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit';
$cfg['Servers'][$i]['AllowDeny']['rules'] =
             array('allow uzivatel from 127.0.0.1');
 

V případě přístupu více uživatelů využijeme autentizaci MySQL a zvolíme odpovídající metodu v phpMyAdminovi. Lze si vybrat mezi autentizací pomocí koláčků nebo s využitím HTTP autentizace. Ta má několik nevýhod, například kvůli návrhu HTTP neumožňuje odhlášení. Autentizace pomocí cookies navíc umožňuje (po příslušném nastavení) i přihlášení k libovolnému MySQL serveru. Proto budou ukázky používat autentizaci pomocí koláčků. Konfigurace pro obě metody se liší jen minimálně. Pro HTTP musíme nastavit jen typ autentizace:

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

Pro koláčky samozřejmě také typ:

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

A ještě heslo které bude použito pro šifrování koláčků:

 
  $cfg['blowfish_secret'] = 'tajne_heslo';
 

Toto heslo nebudeme muset nikde zadávat, je proto možné použít naprosto náhodný řetězec (pokud použijete balíček z distribuce, pravděpodobně toto heslo bylo vygenerováno už při instalaci, například Debian a SUSE toto heslo vygenerují).

Nyní by mělo být možné se do phpMyAdmina přihlásit, po zadání jména a hesla uživatele v MySQL se přihlásíme na úvodní obrazovku, kde již s programem můžeme pracovat.

phpMyAdmin a ods

Nebojte se, nejedná se o vyjádření podpory politické straně :-). Jenom jsem se konečně dokopal k tomu přečíst si něco o OASIS Open Document formátu a naimplementovat export (prozatím spreadsheet) do phpMyAdmina.

Z toho, že je to věc kterou se chystám napsat už asi rok a půl, je vidět, že se mi do toho nijak moc nechtělo. Nějak jsem byl vždy odrazen specifikací, tedy hlavně jejím rozsahem. Nakonec jsem se jejímu čtení vyhnul a použil jenom pár stučnějších návodů. Teď jenom doufám, že to co z phpMyAdmina vypadne. jí odpovídá. OpenOffice.org to zpracují správně, ale to se mi jako test moc nelíbí. Asi by to chtělo najít nějaký OpenDocumentlint :-).

Je deset minut na nastavení moc?

Nedávným zrušením výchozího konfiguračního souboru v phpMyAdminovi jsme zjevně píchli do vosího hnízda a uživatelé (asi 2) si začali stěžovat na to, jaký je to hrozný krok zpět. Teď byli nuceni provést takovou hroznou věc jako čtení dokumentace a strávit tím celých deset minut. Jinak to neuměli nastavit.

To jestli tím opravdu musel strávit deset minut netuším (asi čte hodně pomalu nebo od konce), ale i tak mi připadá, že to byl spíš další důvod k odstranění toho souboru :-).

Původní bug report si můžete přečíst tady .

Nejhorší vlastnost phpMyAdmina

Nejhorší vlastnost phpMyAdmina je podle mnoha lidí bezpochyby to, že korektně podporuje kódování dat nastavené v MySQL. Mám pocit, že na tento dotaz jsem už odpovídal asi tisíckrát, i když poslední dobou tazatale (pokud je předpoklad, že umějí česky) odkazuji na FAQ , tak stejně je toho moc.

Proč si nikdo není schopný přečíst dokumentaci MySQL, kde je to popsáno? Proč raději někdo napíše mail přímo mně, než aby se zeptal na nějakém fóru, mailing listu nebo nedej bože použil vyhledávač a našel otázku některého z tisiců předchozích tazatelů?

Příště raději taková mail alespoň začínejte něčím jiným než něčím jako prepacte ze Vas otravujem, ale uz som bezradny . Třeba takové jsem idiot a neumím nic najít by bylo mnohem lepší. Koneckonců mailů obsahujících Dear translator: just ignore this mail. I haven't read the text above and just submitted the mail as my client displayed it... mi taky chodí dost.

Omlouvám se za tento výlev, ale prostě to muselo ven :-).