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.
Diskuse je zrušena z důvodu spamu.