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