質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

760閲覧

PHPのセッション管理方法をSQLiteにしたい

webgoto

総合スコア1293

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/02/05 04:13

編集2019/02/05 04:47

php実行時のセッションの保存形式をファイルではなくSQLiteのデータベースにしたいと考えています。
phpではデフォルトでSQLiteでのセッション管理方法が用意されているようでしたので、
PHPファイルに

php

1<?php 2ini_set('session.save_handler', 'sqlite'); 3ini_set('session.save_path', __DIR__.'/session.db'); 4session_start();

のように設定し、実行しましたが、

text

1ErrorException: session_start(): Cannot find save handler 'sqlite' - session startup failed in xxxxxxxxxxxxxxxx 2

というエラーが出てしまいます。

設定方法が間違っていますでしょうか?
またsqlite用のハンドラが読み込まれているか確認する方法はありますでしょうか。

よろしくお願いいたします。

環境
PHP Version 7.1.11

pdo_sqlite
SQLite Library 3.15.1

sqlite3
SQLite3 support enabled
SQLite3 module version 7.1.11
SQLite Library 3.15.1

出典
SQLiteでのセッション管理方法について
http://php.net/manual/ja/class.sessionhandler.php

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/05 04:16

>SQLiteでのセッション管理方法 出展を明記してください
m.ts10806

2019/02/05 04:41

あ、できれば、質問本文に追記いただければと
m.ts10806

2019/02/05 05:49 編集

phpからSQLiteへの接続は動作確認済みでしょうか? 見た感じ(ちょっとすぐに試せないのですが)PHPからSQLite接続ができればできそうに思います。
webgoto

2019/02/05 06:12

はい。pdoを使ったsqliteの読み書きは動作しております。
webgoto

2019/02/05 06:36

sqliteコマンドは読み込まれていないようで、 sqlite_openは存在しない関数として実行できませんでした。 代わりにSQLite3クラスが読み込まれていました。 http://php.net/manual/ja/book.sqlite3.php
m.ts10806

2019/02/05 07:28

やはりそうですね。ちょっと根拠探すのに苦労していましたが、回答がついたのでそちらご確認願います。 ※そもそもですが、sqliteにセッション管理を任せるのがあまり一般的ではないという話になってきそうです
webgoto

2019/02/05 07:31

おかげさまで解決に至りました。 pdoとSQLite3の違いも勉強になりました。 ありがとうございます。
guest

回答2

0

ベストアンサー

sqlite関連の拡張モジュールはsqlite, sqlite3, pdo_sqliteの3つがあって、そのうちセッション機能を含んでいたのはsqliteなのですが、これはPHP5.4からなくなりました。

PHP 5.3.x から PHP 5.4.x への移行の削除された拡張モジュール

以下に示す拡張モジュールは PECL に移動し、PHP に同梱されなくなりました。 これらの PECL パッケージ は、ユーザーの需要に応じて作られるかが決まります。

sqlite - ext/sqlite3 や ext/pdo_sqlite には影響しないことに注意しましょう。

Sqlite拡張モジュールのインストール手順:

PHP 5.4 以降では、SQLite 拡張モジュールは PECL 経由でのみ利用可能となります。

この文章をみるとPECLからインストールすれば使えそうに見えますが、実際にPECLをみてみるとsqliteはさらにその以前の、PHPに含まれるようになったからこちらの更新は終わりましたという状態のまま放置されています。

なお現在のphpに含まれているハンドラは、php -iコマンドの表示のなかの以下の行で確認できます。

session Session Support => enabled Registered save handlers => files user ←この行 Registered serializer handlers => php_serialize php php_binary

投稿2019/02/05 07:10

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

webgoto

2019/02/05 07:28

現状(SQLite3)ではsession.save_handlerは自作するしかない感じですね。 登録済みのハンドラの確認方法もわかりました。 ありがとうございます。
guest

0

読み込まれていた拡張モジュールがsqliteではなく、sqlite3でした。
sqlite3の方にはセッションのためのネイティブハンドラは用意されていないので、自作する必要があるようです。

投稿2019/02/05 07:34

webgoto

総合スコア1293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問