Adminer

1ファイルで完結する、 phpMyAdmin みたいなデータベース管理ウェブアプリ

参考


基本

配置

Apacheでみれるとこに配置して、アクセス。

CSS拡張

Adminer 本体と同じディレクトリーに、 adminer.css の名前のスタイルシートが読み込まれる。


プラグイン拡張

プラグインで拡張する場合、 plugin.php を必ず読み込む必要あり。


│  adminer.css
│  sample-database-hide.php
│  sample-login-databases.php
│  sample-login-servers.php
│
├─administrator
│      adminer.css
│      index.php
│
├─plugins (自作したプラグイン)
│      database-show.php
│      login-databases.php
│
└─vendor (サイトからダウンロードしてきたもの)
    │  adminer-4.2.1.php
    │  adminer-latest.php (自分で用意する: ``<?php include dirname(__FILE__) . '/adminer-4.2.1.php';`` )
    │
    └─plugins (ほしいものだけ設置)
            database-hide.php
            login-servers.php
            plugin.php
            tables-filter.php

テーブルフィルター。(公式プラグイン tables-filter)

概要:
データベース選択後の左ペインのテーブル一覧の上にテキストボックスを表示する。
ユーザープラグインでは、 FasterTablesFilter がある。

sample-tables-filter.php

<?php
function adminer_object() {
    include_once './vendor/plugins/plugin.php';
    include_once './vendor/plugins/tables-filter.php';
    return new AdminerPlugin([new AdminerTablesFilter]);
}
include './vendor/adminer-latest.php';

特定のデータベースを隠したい。(公式プラグイン database-hide)

sample-database-hide.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
function adminer_object() {
    include_once './vendor/plugins/plugin.php';
    include_once './vendor/plugins/tables-filter.php';
    include_once './vendor/plugins/database-hide.php';
    return new AdminerPlugin([
        new AdminerTablesFilter,
        new AdminerDatabaseHide(['information_schema', 'mysql', 'performance_schema']),
    ]);
}
include './vendor/adminer-latest.php';

特定のサーバーリストから選択したい。(公式プラグイン login-servers)

sample-login-servers.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
function adminer_object() {
    include_once './vendor/plugins/plugin.php';
    include_once './vendor/plugins/tables-filter.php';
    include_once './vendor/plugins/login-servers.php';
    return new AdminerPlugin([
        new AdminerTablesFilter,
        new AdminerLoginServers(['localhost']),
        //new AdminerLoginServers(['localhost', '127.0.0.1']),
        //new AdminerLoginServers(['optgroup' => ['localhost', '127.0.0.1']]),
    ]);
}
include './vendor/adminer-latest.php';

閲覧できるDBを指定したい。(自作プラグイン login-servers)

警告

でも直接GETで指定されるとみれちゃう。

plugins/login-databases.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php

class AdminerLoginDatabases
{
    function __construct($showPermanentLogin, $servers, $driver = 'server')
    {
        $this->showPermanentLogin = $showPermanentLogin;
        $this->servers = $servers;
        $this->driver = $driver;
    }
    function databases($flush = true)
    {
        $return = array();
        foreach (get_databases($flush) as $db) {
            if (in_array(strtolower($db), array_map('strtolower', $this->servers[SERVER]))) {
                $return[] = $db;
            }
        }
        return $return;
    }
    function login($login, $password)
    {
        foreach (array_keys($this->servers) as $key) {
            if ($key == SERVER) {
                return true;
            }
        }
        return false;
    }
    function loginForm()
    {
?>
<table cellspacing="0">
<tr><th><?php echo lang('Server'); ?><td><input type="hidden" name="auth[driver]" value="<?php echo $this->driver; ?>"><select name="auth[server]"><?php echo optionlist(array_keys($this->servers), SERVER); ?></select>
<tr><th><?php echo lang('Username'); ?><td><input id="username" name="auth[username]" value="<?php echo h($_GET["username"]);  ?>">
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
</table>
<p><input type="submit" value="<?php echo lang('Login'); ?>">
<?php
        if ($this->showPermanentLogin) {
            echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
        }
        return true;
    }
    protected $showPermanentLogin;
    protected $servers;
    protected $driver;
}

sample-login-databases.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
function adminer_object() {
    include_once './vendor/plugins/plugin.php';
    include_once './vendor/plugins/tables-filter.php';
    include_once './plugins/login-databases.php';
    return new AdminerPlugin([
        new AdminerTablesFilter,
        new AdminerLoginDatabases(false, [
            'localhost' => ['information_schema', 'performance_schema'],
            '127.0.0.1' => ['mysql'],
        ]),
    ]);
}
include './vendor/adminer-latest.php';