如何通过登录扩展Adminer以支持SQLite数据库?

And*_*tto 6 php database sqlite adminer

我正在运行一个托管MySQL实例(带有几个数据库)和一些SQLite文件的服务器.我想使用Adminer来管理所有这些,前提是用户提供了有效的凭据.此外,还应填充数据库列表.

在MySQL的情况下,可以使用有效的数据库用户,并且连接开箱即用.但是,必须明确添加SQLite支持.Adminer给出了这个错误:

Implement login() method to use SQLite.
Run Code Online (Sandbox Code Playgroud)
  • 如何扩展Adminer类以启用SQLite登录?
  • 我该怎么做才能填写有效数据库列表?

And*_*tto 7

此答案适用于Adminer 4.2.5版.不幸的是,它对Adminer 4.3.x无效.

你需要重写logindatabases该方法的Adminer类,确保你只为SQLite的驱动程序去做,而不是在其他情况下.以下代码实现了具有数据库列表的基本登录系统:

<?php
function adminer_object() {
    class AdminerSoftware extends Adminer {
        function login($login, $password) {
            global $jush;
            if ($jush == "sqlite")
                return ($login === 'admin') && ($password === 'changeme');
            return true;
        }
        function databases($flush = true) {
            if (isset($_GET['sqlite']))
                return ["/path/to/first.db", "/path/to/second.db"];
            return get_databases($flush);
        }
    }
    return new AdminerSoftware;
}
include "./adminer-4.2.5.php";
Run Code Online (Sandbox Code Playgroud)

代码可以适用于支持多个用户.将文件保存在index.php所在的同一目录中adminer-4.2.5.php.确保调整用户名,密码和数据库路径.

以下是一些重要的评论:

  • login方法没有正确命名,它是由Adminer执行的初始检查
  • 对于具有内置用户功能的数据库,例如MySQL,此方法应始终像原始类一样返回true
  • SQLite文件没有内置身份验证,因此我们定义了一个人工检查以防止未经授权的访问

结果

Adminer显示的SQLite数据库列表