[PHP-users 26688] Re: 報告>>PHPで独自のディレクトリ認証を

nomoto shin-1 @ ca2.so-net.ne.jp
2005年 8月 30日 (火) 11:52:37 JST


  nomotoです。

表題の件の結果報告です。

今回の話では、最終的にmod_rewriteでリクエストをPHPに振り返る
方法ではなく、ActionとAddHandlerを使いPHPで独自ハンドラを作る
事で対応しました。結果として仕組みはmod_rewriteを使うのと大差
なかったですね。
htmlへのアクセスがあったときにphpが呼ばれるので、個別のhtmlへ
の修正はまったく必要ありませんでした。

特定の拡張子のものだけをパスワード保護して制御したいという事に
なりましたので、これで十分でした。

.htaccessファイルに
Action my-check /logincheck.php
AddHandler my-check .html

として、logincheck.phpでは$_SESSIONに保存した初回アクセスtimeから
の経過時間を調べて、OKだったときは、$_SERVER['PATH_TRANSLATED']
に渡されるリクエストファイルの絶対パスから対象ファイルを読み込んで
出力するようにしました。

Actionに指定したphpスクリプトは通常呼び出されるスクリプトと同じ
ようにプログラミングできましたが、注意が必要だったのは、対象ファイル
を読み込んでそのまま出力するだけでもinternal_encodingからhttp_output
の文字コード変換が行われてしまって、意図しない文字化けが発生しま
した。
  mb_http_output('pass');
  readfile($file);
として、このときだけコード変換しないで出力するようにすればOKでした。

また一旦htmlを読み込んで出力するため、事前に{$や{ifという文字が
htmlに入っているかチェックして、Smartyを通すようにして、ログイン者の
名前をhtmlのナビ部分に出したり「ログイン」「ログアウト」のリンクの
切り替えを任意のhtmlページに貼り付けたりといった事も簡単にできました。

今後、同じ事をしようとする方が出てきたときの参考になれば幸いです。
ありがとうございました。


PHP-users メーリングリストの案内