Pear:AuthとFlashとHTMLの連携

作りたいもの
・自分のFlashアプリ(サイト)にログイン機能をつけユーザー管理を出来るようにする。
FlashからXMLを送信してサーバーでファイル保存を行う。
・保存したファイルはユーザー毎に分けて管理を行う。


今回は上記要件を満たすためにPear:Authを使うことにし、
サーバー側はPHPで書くことにしました。サーバーはさくらのスタンダートです。
Pear:Authはホームページにログイン機能を付けるためのPHPのモジュールです。


sshを入れる。
サーバーの設定やDBなどをいじるためにまずssh接続できる端末を入れます。
http://support.sakura.ad.jp/support/manual/rs/tech_ssh.shtml


Pear:Authのインストール
さくらサーバーにはPearは入っていたのですがAuthは入っていなかったので、インストールします。
以下サイト参照してインストールします。インストールは先程落としたsshでつなげて実施します。

http://muneto.murakami.biz/web/auth.php
http://pear.php.net/manual/ja/installation.shared.php

pear config-create をすると、.pearrcという設定ファイルが作成され、
共有サーバーなどで、pearの自分専用のローカルコピーができるそうです。
http://pear.plus-server.net/installation.shared.html


php.iniにinclude_pathを登録
Pear:Authを使うためには、require_once("Auth.php");としてAuthをインクルードするのですが、
このままインクルードすると、自分専用のAuth.phpにパスが通っていないため参照することができません。
毎回フルパスで書いてもよいのですが、php.iniにパス登録すると便利です。

さくらのインターネットサーバーコントロールパネルからPHP設定の編集を選びphp.iniを作成。
php.iniに以下を記載します。

include_path=”.:/home/ユーザー名/pear/php:”

自分は、インターネットサーバーコントロールパネルから作成すると文字化けしたので、
作った後、FTPで修正しました。
ちゃんと出来ているかはphpinfo関数で調べれられます。
http://www.phpbook.jp/install/phpini/index4.html

※注意点
include_pathは,Unixは:で区切りWindowsは;で区切ります。
http://okwave.jp/qa/q3517118.html


●Authを使ってみる
以下のサイトをみてAuthのサンプルを作ろう…といいたい所ですが、DBからユーザー名、パスワードを取り出すので
少し面倒です。
http://pear.php.net/manual/ja/package.authentication.auth.intro.php


自分は以下の本のサンプルを使いました。以下の本では配列にパスワードをいれて認証する方法まで書いています。
これなら、DBの設定はいらず、Authのテストだけが簡単にできます。


PHPはほぼ初めてでしたが、Webアプリケーションの仕組み、データベース、PHPの文法などすごく分かりやすかったです。
プログラム初心者にはオススメできませんが、他の言語理解している人なら必要なことがまとめて乗っているのですごくよい本だと思います。
サンプルが充実しているのもいいです。アップローダー、簡易ブログシステムの作成までサンプルあるので、この本だけあれば
いろんなものが作れそうです。

●Authの認証にDBを使う
Authの動作が確認できたら、AuthでDBを使っての認証を試してみました。
DBだとユーザー管理がしやすいんですよね。DBはMySQLを使いました。Oracleは使ったことありますがMySQLは初めてです。


さくらインターネットのサーバーコントロールパネルから、データベースの設定を選び、データベースを新規に作ります。
作成すると、データベースのユーザー名、データベース名、データベースサーバーが決まります。
データベースが作られたら、テーブルを作ります。
http://www.phpbook.jp/pear/pear_auth/index5.html
ユーザー名、データベース名は予め決まっているので新規に作る必要はないようです。
テーブル作成から始められます。

データベースができたら、このあたりのサイトを見ながらテストします。
http://www.phpbook.jp/pear/pear_auth/

Pear:Authのよいサンプル
ログイン、ログアウト機能に加えDBに新たなユーザーを追加する機能があります。
http://ameblo.jp/ymty/entry-10024202648.html
ソースを分割して綺麗にまとめています。
http://q.hatena.ne.jp/1255063132

PHPのセッションについて
自分はコンシューマーアプリを作ってきた人間なので、このへん疎いのでまとめておきます。


Webアプリ、サイトではユーザーを区別するために、Cookie等を使い、セッションの管理を行ないます。
セッションとは - はてなキーワード
イメージ的には、合言葉を決めておいてそれを送信しあうことでユーザーを認識する感じです。


PHPでは生Cookieを使う方法に加え、セッションを扱うための機能が存在します。
セッションをつかうことで、ユーザーの識別などが簡単になります。
Pear:Auth自体もセッションを使って管理しているので、セッションの考え方を理解するのは重要です。


セッションは有効期限を超えるか、PHPで専用関数を呼び出すことで終了できます。(この辺まだ勉強中です。)
ブラウザを閉じたり、ページを移行してもセッションは維持されます。
他のブラウザを使ったりするとFirefoxChromeSafariIE、クッキー保存している場所が違うのでセッションは引き継がれません。


PHP関連の調べたサイトのまとめ
いろいろ調べたサイトを置いておきます。


http://q.hatena.ne.jp/1132304878
http://q.hatena.ne.jp/1255789735
http://hatomugi.sakura.ne.jp/forum.php?id=190
http://www.adamrocker.com/blog/91/sakura_internet_mysql.html

ヘッダまわりはバグるとめんどくさいですね。requireで読み込む際にヘッダいじっているかもしれないので、
echoでHTMLのヘッダとか投げないようにしましょう。(先頭でrequireする)
http://q.hatena.ne.jp/1176477309
http://q.hatena.ne.jp/1168608777
http://q.hatena.ne.jp/1186266528

requreはc言語のincludeより強力な感じがします。
http://phpspot.net/php/man/php/function.include.html

mysql
http://www.adamrocker.com/blog/91/sakura_internet_mysql.html

セッション関連
http://questionbox.jp.msn.com/qa1481961.html
http://www.yc.tcu.ac.jp/~yamada/doc/php/0802.html
http://q.hatena.ne.jp/1179933963
http://www.phpbook.jp/pear/pear_auth/index8.html

ワナ
ヒアドキュメントは見事にはまりました。
http://scriptlife.hacca.jp/tips/php.html


PHPで作成したHTMLをFlashで読み込む。
AS3.0ではLoaderInfoを使います。HTMLはFlashVarsで渡します。
http://www.saturn.dti.ne.jp/~npaka/flash/as30/ParamEx/index.html
http://onegame.meby.net/tips/param.html
http://www.two-ways.com/mt/usakorog/flash/
http://cocoasaurus.com/blog/2009/09/as3htmlflashvars.html
http://eringi.com/weblog/archives/2005/11/flashvars_htmlf.html
Adobeのサイト


Flashで作成したXMLPHPでファイルに保存する。
URLLoader、URLRequestで送信し、 $GLOBALS['HTTP_RAW_POST_DATA']で、生ファイルを受け取れます。
英語サイトですが。
http://www.actionscript.org/forums/showthread.php3?t=169554
プログラムするときに英語読めるとソースが広がってよいですよね。Windowsアプリ作る時もMSDNの翻訳のおかげでずいぶん
鍛えられました。


URLVariablesを使ってサーバー側でXML作るやり方もありますね。
この場合POSTの受け取り方が変わります。
http://www.at-sonic.com/blog/archives/2008/02/as3php.php
http://www.phppro.jp/qa/301#top
http://q.hatena.ne.jp/1204159983
http://blog.livedoor.jp/hiroki0907/archives/51179755.html


●まとめ
ここまでの知識をうまく活用すれば
・自分のFlashアプリ(サイト)にログイン機能をつけユーザー管理を出来るようにする。
FlashからXMLを送信してサーバーでファイル保存を行う。
はできると思います。Flashでログイン機能を作る場合はFlash内で完結させるのもありですね。
そうすればセッション管理もまとめられそうですし。


今は、ユーザー毎の管理の部分を作っているところです。こちらはDB関連の処理がいりますね。
もう少し整理して作成していこうと思います。