あむちょです。
最近マイブームのPHPで、アカウントを管理するのに便利なライブラリーを使ってみました。
今回使ったのは、アカウント作成からメールでの承認、ログインを簡単に作成できるphpUserClassというライブラリーです。
こっからダウンロードできます。phpUserClass-GitHub
中身は、
- access.class.php -ライブラリー本体
- example-jquery.php -jQueryを使ったログイン
- example1.php -ログイン
- example2.php -アカウント発行
- example3.php -メール承認によるアカウント発行
っとなってます。
とても便利なライブラリーですが、最終更新が4年前と今のphpのバージョンだと非推奨なやり方だったり、エラーがたくさんあります。勉強がてらエラー直しつつ使ってみました。
データベースの用意
まずはアカウントデータを保存するデータベースの用意。
mySQLで適当なデータベースとユーザーとパスワードを作る。このブログのサーバーは、Xserverを使っており、サーバーパネル側で作りました。
次にテーブルの準備。
example2.phpに書いてあるコメントをmySQLでそのまま実行するだけす。
CREATE TABLE `users` ( `userID` mediumint(8) unsigned NOT NULL auto_increment, `username` varchar(50) NOT NULL default '', `password` varchar(100) NOT NULL default '', `email` varchar(150) NOT NULL default '', `activationHash` varchar(150) NOT NULL default '', `active` tinyint(1) NOT NULL default '0', PRIMARY KEY (`userID`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`), KEY `active` (`active`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
次にaccess.class.phpに必要なデータベース情報を入力
43〜63行
<br /> private $dbName = ‘データベース名’;<br /> private $dbHost = ‘ホスト名’;<br /> private $dbUser = ‘ユーザー名’;<br /> private $dbPass = ‘パスワード’;<br />
これで準備は完了。サンプルが動かせると思いきや、たくさんのエラーでうまいこと動かない。
エラーをいくつかなおす
まずexample1〜3.php共通で1行目、<?を<?phpに変更。
次にaccess.class.php
190行
setcookie($this->remCookieName, '', time()-3600);
を
setcookie($this->remCookieName,'', time()-3600, '/', $this->remCookieDomain);
こいつのせいでcookieが削除できずログアウトできません。私が最初に使ったバージョンだと’/’のシングルクォーテーションの文字コードがちょっとおかしい’/’という罠もありました。
298行 if(!res)をif(!$res)に。
example1.php33行
<br /> <a href="<?php echo htmlspecialchars($_SERVER[‘PHP_SELF’]); ?>’?logout=1">logout</a><br />
を
<br /> <a href="<?php echo htmlspecialchars($_SERVER[‘PHP_SELF’]); ?>?logout=1">logout</a><br />
?logout=1の前にシングルクォーテーションが入ってるという地味な罠…
これで一通り動くはずです。
実際の使い方
まずはライブラリーを読み込んでインスタンス化
<br /> require_once ‘access.class.php’;<br /> $user = new flexibleAccess();<br />
これは各ページで必須のおまじない。次にログイン中かチェック
<br /> if ( $user->is_loaded() ){<br /> //ログイン中<br /> }<br /> else{<br /> header(‘Location:ログインページurl’);<br /> }<br />
もしログインしていなければログインページへリダイレクト。exampe1.php、example-jquery.phpがそれにあたります。
アカウントがなければexample3.phpのようにアカウントを発行してもらう流れになると思います。
ユーザー名やIDを拾得する時は
<br /> if ( $user->is_loaded() ){<br /> $id = $user->get_property(‘userID’);<br /> $name = $user->get_property(‘username’);<br /> }<br />
でできます。
実際に動くサンプルをみせたいとこですが、これを使っているのがcometを使ったリアルタイム同期チャットでサーバーにすごく負担をかける。
だからみせられないよ
[ad][ad]