adminer.php で SQLite3 に接続できない時

  • PHP
  • SQLite

adminer.php はさまざまなデータベース管理システムに対応している便利なクライアントツールですが、最新版の4.7.1(2019/07現在)では、SQLite3 の項目があるもののなぜか接続できません。少し改造して、接続できるようにしてみます。

フォルダの作成

下記のような構成のフォルダを作成します。ここではadminer/という名前にしておきます。その中に adminer.php の最新版(この時点では4.7.1)を置いておきます。また、index.php と plugins/ ファルダを作成しておいてください。

adminer/
    └ adminer-4.7.1.php
    └ index.php
    └ plugins/

コード

index.php

下記のコードを貼り付けます。

<?php
function adminer_object() {
    // required to run any plugin
    include_once "./plugins/plugin.php";
    
    // autoloader
    foreach (glob("plugins/*.php") as $filename) {
        include_once "./$filename";
    }
    
    $plugins = array(
        // specify enabled plugins here
        new AdminerLoginSqlite("admin", password_hash("", PASSWORD_DEFAULT)),
    );
    
    /* It is possible to combine customization and plugins:
    class AdminerCustomization extends AdminerPlugin {
    }
    return new AdminerCustomization($plugins);
    */
    
    return new AdminerPlugin($plugins);
}

// include original Adminer or Adminer Editor
include "./adminer-4.7.1.php";

最終行のinclude "./adminer-4.7.1.php";で adminer.php の本体を読み込んでいます。別のバージョンを複数入れておいて、ここでどのファイルを読み込むか決めることができます。

また、new AdminerLoginSqlite("admin", password_hash("", PASSWORD_DEFAULT)),でユーザー名とパスワードを決めています。ここでは

  • ユーザー名 … admin
  • パスワード … 空

としています。空なのはちょっとまずいかもしれませんが…。

plugins/login-sqlite.php

SQLite にログインするための拡張ファイルです。ソース元がどこか忘れてしまいました…。

/** Enable login for SQLite
* @link https://www.adminer.org/plugins/#use
* @author Jakub Vrana, https://www.vrana.cz/
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/
class AdminerLoginSqlite {
	/** @access protected */
	var $login, $password_hash;
	
	/** Set allowed credentials
	* @param string
	* @param string result of password_hash
	*/
	function __construct($login, $password_hash) {
		$this->login = $login;
		$this->password_hash = $password_hash;
	}
	
	function login($login, $password) {
		if (DRIVER != "sqlite" && DRIVER != "sqlite2") {
			return true;
		}
		return $this->login == $login && password_verify($password, $this->password_hash);
	}

}

plugins/plugin.php

aminer.php のプラグインを使うために必須のファイルです。公式サイトのプラグインページからダウンロードできます。「plugin」というファイルですが、下記からも直接飛べます。

  • plugin: Required to run any plugin

SQLite3 に接続する

adminer/ をアップロードして、アクセスします。うまくいっていればいつものログイン画面が表示されるはずなので、SQLite3 を選択します。ユーザー名は admin, パスワードは空です。データベースは sqlite のファイルまでのフルパスを記述します。フルパスはphpinfo()の DOCUMENT_ROOT に記載してあります。

adminer.php は便利ですが、IP 制限をかけたりしていない場合は誰もがログイン画面にアクセスできてしまうので、使った後は削除しておきましょう。