PHPからSQLite3を使うための設定

Golangで作ったSQLite3のデーターベースをPHPからアクセスするためのメモです。初期状態ではSQLite3は使えないのでインストールと初期設定が必要です。

・実行環境と版数

OS : Raspberry PI zeroのRaspbian

$ php –version

PHP 7.3.31-1~deb10u7 (cli) (built: Jun 17 2024 21:48:38) ( NTS )

$ apachectl -v

Server version: Apache/2.4.38 (Raspbian)

 

・sqlite3 driverのインストール

$ sudo apt install php-sqlite3

インストール確認は、$ php -mで、

sqlite3 // これが見えればOK

 

・Apacheの再起動

これをしないとPHPコマンドからのスクリプト起動はうまくいくが、Apacheとはまだ連携していないのでブラウザ経由でSQLite3へのアクセスはできない。(しばらくハマった)

$ sudo service apache2 restart

ちなみに該当のコードは以下の通り、

<?php
$file = 'presenters_list.json';

if (file_exists($file)) {
    $json_data = file_get_contents($file);
    $presenters = json_decode($json_data, true);
    
    // ---------------------------------------------------
    // to access SQLite3 data (myfare app) and pull Ninja names who will make a presentaion
    $db_name = '/home/pi/myfare/myfare.db';
    $mifare = '';
    // to calculate a table name for the sqlite3 data base
    $year = date('Y');
    // leap year check
    if ($year%4 == 0){
        $show_date = ($year - 1).'-12-31';
    } else{
        $show_date = $year.'-1-1';
    }
    $show_date_timestamp = strtotime($show_date);
    $past_days = intval((abs(time() - $show_date_timestamp)) / (60 * 60 * 24));
    $tbl_name = "tbl".$year.$past_days;
    //$tbl_name = 'tbl2023108';   // tbl2023108 : this line is only for debugging
    //query names whose pressentation status is ON

    $db = new SQLite3($db_name);   
    $query_name = 'SELECT name FROM '.$tbl_name.' where presentation="1";';
    // to check if the table is available and issue query if exists
    $sql = "SELECT name FROM sqlite_master WHERE type='table' AND name="."'$tbl_name'";
    $result = $db->query($sql);

    if ($result->fetchArray()) {
        $result = $db->query($query_name);

        if (!empty($result)) {
            while ($row = $result->fetchArray()) {
                $mifare = $mifare.json_encode($row['name'].'@mifare').',';
            }
        }
        } else {}
    $db->close();
    // end of myfare data hundle code
    // ---------------------------------------------------
    
    if ($presenters !== null) {
        // to check if there is any name on presenter_list
        if (json_encode($presenters)== '[]'){
            echo '['.substr($mifare, 0, -1).']';
        }else{
            echo '['.$mifare.substr(json_encode($presenters), 1);
        }
        
    } else {
        echo json_encode(array('error' => 'error occured during file analysis'));
    }
} else {
    echo json_encode(array('error' => 'could not find the file'));
}
?>

 

admin