Michal Čihař - Blog Archives for phpMyAdmin

Zobrazování dat a MIME transformace

Při procházení tabulek phpMyAdmin přímo zobrazí jen textová data a pokud do tabulek ukládáme třeba obrázky, dozvíme se, že jen jeho velikost. Pokud chceme přímo zobrazit obrázek, musíme mít nastavené používání MIME transformací. Jak pro tento účel nastavit phpMyAdmina již bylo popsáno v článku o  rozšířených možnostech .

Předdefinované transformace

phpMyAdmin přichází s mnoha předdefinovanými transformacemi, které pokrývají nejčastěji používané operace. Jejich aktuální popis je v phpMyAdminovi obsažen, tak se můžete podívat na demo server .

Použití transformací je jednoduché, stačí vybrat požadovanou transformaci ve vlastnostech sloupce a při prohlížení se automaticky aplikuje. Některé transformace se dají dále nastavit pomocí parametrů, jejich popis je ve výše odkázaném seznamu transformací.

Vlastní transformace

Kromě předdefinovaných transformací můžeme vytvořit i svoje vlastní. Například se rozhodneme, že do popis programu může obsahovat formátovací značky BBCode (obsahuje základní formátování, používá se například v phpBB.

Transformaci pojmenujeme bbcode, a protože bude zpracovávat text, tak MIME typ bude text/plain. V adresáři libraries/tran­sformations tedy vytvoříme soubor text_plain__bbco­de.inc.php, který musí obsahovat funkci PMA_transforma­tion_text_pla­in__bbcode, která bude zavolána pro každou položku s prvním parametrem obsahujícím hodnotu pole v databázi, další dva parametry nebudeme pro naší transformaci potřebovat, ale obsahují případné parametry transformace a meta informace o sloupci tabulky.

Po chvíli hledání na internetu nalezneme funkci pro zpracování BBCode:

 
  $GLOBALS['bb_patterns'] = array(
    '`\[b\](.+?)\[/b\]`is',
    '`\[i\](.+?)\[/i\]`is',
    '`\[u\](.+?)\[/u\]`is',
    '`\[strike\](.+?)\[/strike\]`is',
    '`\[color=#([0-9a-fA-F]{6})\](.+?)\[/color\]`is',
    '`\[email\](.+?)\[/email\]`is',
    '`\[img\](.+?)\[/img\]`is',
    '`\[url=([a-z0-9]+://)([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?' .
       '(/[^ \"\n\r\t<]*?)?)\](.*?)\[/url\]`si',
    '`\[url\]([a-z0-9]+?://){1}([\w\-]+\.([\w\-]+\.)*[\w]+' .
       '(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\[/url\]`si',
    '`\[url\]((www|ftp)\.([\w\-]+\.)*[\w]+(:[0-9]+)?' .
       '(/[^ \"\n\r\t<]*?)?)\[/url\]`si',
    '`\[flash=([0-9]+),([0-9]+)\](.+?)\[/flash\]`is',
    '`\[quote\](.+?)\[/quote\]`is',
    '`\[indent](.+?)\[/indent\]`is',
    '`\[size=([1-6]+)\](.+?)\[/size\]`is'
);

$GLOBALS['bb_replaces'] =  array(
    '<span style="font-weight: bold">\1</span>',
    '<span style="font-style: italic">\1</span>',
    '<span style="border-bottom: 1px dotted">\1</span>',
    '<strike>\1</strike>',
    '<span style="color:#\1;">\2</span>',
    '<a href="mailto:\1">\1</a>',
    '<img src="\1" alt="" style="border:0px;" />',
    '<a href="\1\2">\6</a>',
    '<a href="\1\2">\1\2</a>',
    '<a href="http://\1">\1</a>',
    '<object width="\1" height="\2"><param name="movie" value="\3" />' .
       '<embed src="\3" width="\1" height="\2"></embed></object>',
    '<strong>Quote:</strong><div style="margin:0px 10px;padding:5px;' .
       'background-color:#F7F7F7;border:1px dotted #CCCCCC;' .
       'width:80%;"><em>\1</em></div>',
    '<pre>\\1</pre>',
    '<h\1>\2</h\1>'
);

function bbcode( $string){

    global $bb_patterns, $bb_replaces;
    return preg_replace($bb_patterns, $bb_replaces ,
        nl2br(htmlspecialchars($string)));
}
 

A nyní již zbývá jen napsat transformační funkci, ta bude v tomto jednoduchém případě spočívat jen v zavolání jiné funkce:

 
  function PMA_transformation_text_plain__bbcode(
    $buffer, $options = array(), $meta = '') {

    return bbcode($buffer);
}
 

Hotovou transformaci si můžete stáhnout zde . Teď již jen zbývá nastavit používání této transformace na sloupec s popisem a můžeme využít formátovací možnosti BBCode. Podobným způsobem můžeme vytvořit libovolnou transformaci zpracovávající data při zobrazování. V některé s následujících verzí phpMyAdmina se možná dočkáte i podobné transformace pro editaci dat, ale to je ještě hudba vzdálené budoucnosti :-).

Přílohy:

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.

Czech pages about phpMyAdmin

After two weeks of testing, I'd like to announce Czech pages about phpMyAdmin - http://phpmyadmin.cz/. You will find there various tips and howtos for using phpMyAdmin as well as project and development news. I'd like to build there a community where people could find help about this tool in their native language, but I have no idea whether it has a chance to succeed. Anyway the domain name was cheap so I had to try to realize idea, which was sitting in my head for quite a long time.

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.

Troubles on being popular

phpMyAdmin is quite popular tool and it attracts people who want to earn money on it. For long time Navicat company used phpMyAdmin name to propagate their completely different product, but this seems to be gone now (probably with help from Google, but I haven't receive reply from them, but short after my complain, all their ads abusing phpMyAdmin were gone).

Today Marc spotted that somebody just stole our website added Google shopping cart and started to sell phpMyAdmin:

Main stolen page screenshot Buy page screenshot

Lets see how long will it take to get them down.

PS: There is intentionally no link in this post, you can see URL on screenshot, if you really want.

Update: It looks like hosting is very responsible on such problems, they just disabled this domain:

Hello,

Thank-you for your e-mail enquiry.

Please be advised that we have disabled site php-my-admin.awardspace.com.

AWARDSPACE.COM provides legitimate web hosting services and has a ZERO tolerance policy towards these violations.

We apologize for the inconvenience this has caused you. If you still have any concerns in regards this matter feel free to contact us.

Best Regards, Harry

AWARDSPACE Dedicated Support Team support@awardspace.com

/"Your winning web hosting provider"/ http://www.awardspace.com