phpMinAdmin – demo

Školení, která pořádám

Pro jednoduché vyzkoušení nástroje phpMinAdmin lze použít demo. Nejprve jsem ho vytvořil jednoduchým zkopírováním souboru phpMinAdmin.php na hosting, uvedením přihlašovacích údajů jako výchozích a automatickým přihlášením uživatele na domácí stránce projektu. Vzápětí ale někdo smazal demonstrační databázi a přestože si uživatelé mohou vytvořit novou, vypadalo demo poněkud prázdně. Uživatelé si navíc přepisovali své změny.

Bylo potřeba s tím něco udělat, ale vytvářet speciální verzi pro demo se mi nechtělo. Využil jsem proto direktivu auto_prepend_file, kterou před vlastní aplikaci vložím následující kód:

<?php
session_start();
$_SESSION["databases"][""] = array("p199217_" . substr(session_id(), -8));
if (isset($_GET["logout"])) {
    mysql_query("DROP DATABASE `" . $_SESSION["databases"][""][0] . "`");
} elseif ($_GET["db"] == $_SESSION["databases"][""][0]) {
    if (!mysql_select_db($_GET["db"])) {
        mysql_query("CREATE DATABASE `$_GET[db]`");
        mysql_select_db($_GET["db"]);
        // naplnění databáze testovacími daty
    }
} elseif (strlen($_GET["db"])) {
    $_GET["db"] = "invalid_database";
}
?>

Každý uživatel má svou databázi odvozenou z jeho session identifikátoru. Využívá se toho, že aplikace kešuje seznam databází (protože na SourceForge.net a asi i jinde trvá jeho získání poměrně dlouho) a tato keš se jednoduše inicializuje. Pokud databáze daného uživatele neexistuje, tak se vytvoří a naplní testovacími daty. Pokud se uživatel pokusí pracovat s jinou databází, tak se místo ní nastaví databáze, ke které se nepodaří přihlásit. Při odhlášení uživatele se databáze smaže, což se dělá i v pravidelném intervalu:

<?php
$active_dbs = array();
foreach (glob("sess_*") as $filename) {
    $active_dbs[substr($filename, -8)] = true;
}
$result = mysql_query("SHOW DATABASES");
while ($row = mysql_fetch_row($result)) {
    if (!isset($active_dbs[substr($row[0], 8)])) {
        mysql_query("DROP DATABASE `$row[0]`");
    }
}
mysql_free_result($result);
?>

Uvedené řešení není sice zcela neprůstřelné, další ošetření by ale už vyžadovalo zásah přímo do aplikace, do čehož se mi moc nechce.

Jakub Vrána, Adminer, 17.8.2007, diskuse: 4 (nové: 0)

Diskuse

ikona Marty:

Jen drobné upozornění, když kliknu na odkaz demo v tomto článku (http://phpminadmin.sourceforge.net/phpMinAdmin.php), otevře se phpMinAdmin s žádostí o zadání serveru, jména a hesla. Pokud kliknu na domovskou stránku projektu z phpMinAdmina (http://phpminadmin.sourceforge.net/) a pak se vrátím kliknutím na demo (http://phpminadmin.sourceforge.net/phpMinAdmin.php), tak vše běží podle popisu v článku. Problém bude zřejmě v inicializaci sessions.
Jinak hezký kabátek, určitě začnu používat :-)

ikona Jakub Vrána OpenID:

Ano, to je očekávané chování. phpMinAdmin při prvním přístupu vyžaduje přihlášení. Na titulní stránce se přihlášení zfalšuje, z jiného serveru to ale samozřejmě nejde.

Forrest79:

Ahoj,
jenom jedna drobnost k jinak skvelymu phpminadminu. Pri prihlaseni je poslicku s username omezeny na 16 znaku. Nahral jsem aplikaci na server, kde mam username 22 znaku... Musel jsem to pak rucne upravit v kodu. Tak jenom jestli by to neslo trochu rozsirit. Jinak diky!

ikona Jakub Vrána OpenID:

Podle dokumentace a tabulek v mysql databázi je sice maximální délka uživatelského jména právě 16 znaků, ale protože už to reportoval jeden člověk, tak už jsem to v SVN verzi dříve opravil.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.