delight_im:共通設定
概要説明
各WEBアプリの PHPコードにインクルードする共通設定用のファイルです。 役割は、 1. ユーザー認証用のオブジェクトを生成 2. ログイン済かどうかをチェックする関数を用意 になります。
コードの一例
コードの一例を示します。<?php /* * ユーザー認証 */ session_start(); // ① require_once __DIR__ . '/../vendor/autoload.php'; // ② use Delight\Auth\Auth; // ⑤ // データベースのオブジェクトを生成 // ③ define("SERVER_NAME", 'localhost'); // サーバーの名前 (本番サーバーでは名前を変えること) require_once("rdb.class.php"); $o_Rdb = Rdb::getInstance(); $db = $o_Rdb->getDb(); // ライブラリの警告抑制 // ⑦ set_error_handler(function ($errno, $errstr, $errfile, $errline) { if ($errno === E_DEPRECATED && str_contains($errfile, "vendor\\delight-im\\")) { return true; } return false; }); // ユーザー認証用のオブジェクト生成 // ➃ $auth = new Auth($db); // 以降は通常のエラーハンドラに戻す // ⑦ restore_error_handler(); // ログイン済かどうかチェック関数 // ⑥ function require_login(): void { global $auth; if (! $auth->isLoggedIn()) { header('Location: ./../class/login.php'); exit; } } ?>以降、各部分毎に分けて説明します。
① セッション
WEBの全ページでログイン状態を保持するために、セッションを使用します。 $_SESSION['user_id'] のように参照します。 session_start でセッションを開始します。
② autoload.php
Composer 配下の各ライブラリについて、 コード内でクラスを指定すると、必要なファイルを自動で読み込んでくれます。
③ データベース・オブジェクト
"users" などのテーブルに接続するための、 データベース・オブジェクトを生成します。 $db でアクセスできるようにしています。 # この部分は認証とは別の話なので、詳細は割愛します。
➃ ユーザー認証オブジェクト
new Auth($db) で ユーザー認証オブジェクトを生成します。 $auth でアクセスできるようにしています。
⑤ パスの短縮
上で、new Auth($db) と書いていました。 これは、 use Delight\Auth\Auth; で、どの Auth を使用するかを予め指定していたからです。 use を書かない場合は、 new \Delight\Auth\Auth($db) と、フルパスで書かないといけなくなります。
⑥ ログイン済みか
require_login の $auth->isLoggedIn() で、 現在ログイン済みかをチェックします。 ログイン済みなら true、そうでなければ false を返します。 false なら、login.php (ログイン画面) に強制遷移します。
⑦ Deprecated エラー回避
PHP8 以降、バージョンが上がるにつれて、エラーチェックが厳しくなっています。 delight-im でも、素で使用すると、Deprecated: Delight\Db\PdoDatabase::__construct(): Implicitly marking parameter $pdoInstance as nullable is deprecated,といった警告が大量に出ます。 本番環境なら E_DEPRECATED でエラーを出さないようにすればいいですが、 開発中では細かなエラーもチェックしたい。 そこで、 set_error_handler を使って、 エラー番号が E_DEPRECATEDで、エラー文字列に "vendor\\delight-im\\" が含まれていればエラーをスキップします。 delight-im オブジェクトを生成した後は、 restore_error_handler で元に戻しておきます。set_error_handler すると、現在の状態をスタックに保存してから設定を変更します。 restore_error_handler はスタックに保存した設定を取り出して元に戻します。 よって、自前コードで元の設定を覚えておく必要はありません。 スタックを使用するので、 set_error_handler を複数使用する場合は、 restore_error_handler の置き場所や数に注意しましょう。
set_error_handler すると、現在の状態をスタックに保存してから設定を変更します。
restore_error_handler はスタックに保存した設定を取り出して元に戻します。
よって、自前コードで元の設定を覚えておく必要はありません。
スタックを使用するので、
set_error_handler を複数使用する場合は、
restore_error_handler の置き場所や数に注意しましょう。