ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

いろいろ細かい修正したメモ。

  • GoogleMapのプラグインで、GoogleMapのAPIキーの設定をしてなかったり、_YB('js.enabled')がfalseの場合は単に指定された緯度経度とズーム率だけ指定したGoogleMapへのリンクを表示するようにした。
  • setup.phpを調整。
    • ユーザIDのシーケンスを見て、1以上だったら既にYakiBikiがセットアップ済としてsetupを実行できないよう保護。
    • テキスト形式で、セットアップ時に"Draft"テンプレート追加。
    • グループに最初から「家族」「友達」グループを追加するよう変更。というか「グループA」「グループB」と併せてACLのサンプルもあったので、そっくり家族と友達に入れ替え。
    • テンプレートでまだタイトルにバグが残ってたので修正。
  • config.phpを YB_CONFIG_PHP という定数で指すよう調整。init.php呼ぶ前にしておく。init.phpではconfig.phpをYB_CONFIG_PHP定数経由でrequireするよう修正。
    • 何が嬉しいかというと、エントリポイントを複数作成した時にconfig.phpもそれぞれに併せて好きな位置に配置できるようになった。今まではinit.phpの中で libs/config.php で固定指定していたので、libsディレクトリを丸ごとコピーかよというところが、各エントリポイントでYB_CONFIG_PHPを切り替えておけば済むようになった。折角 _YB('index_file') 用意したのだから活用できる形にした。

あと他と比較すれば大きめのを。

yb_Session::regenerate_id()の修正と、通常アクセス時にも一定期間で呼ぶよう修正。

・「session_regenerate_idの使い方に注意!」
http://blog.ohgaki.net/session_regenerate_ida_rafia_a_sa_lasua

ログイン・ログアウト時にはyb_Session::regenerate_id()を呼ぶようにしていた。で、今回通常時にも一定期間で呼ぶよう修正したのだけれど、なんかセッションがクリアされてる?っぽい。古いセッションIDセットして一度session_destroy()呼んでるんだけど、そのせいか?
しょうがないので、regenerate_id()メソッド内で一旦$_SESSIONをごっそりコピーして、session_destroy()→新しいセッションIDをセット→このあとでコピーしておいたバックアップを$_SESSIONに代入して復元、という流れに調整した。

セッションクッキーって一度はユーザーリクエストを受け入れるしかないので、DoSには弱いのかも。一応PHPにもセッションのGC機構が組み込まれてるので、適切に調整しておけば期限の切れたセッションデータを削除してくれるのだけれど。

PEAR同梱した。

"require"や"include"で色々検索して、使っててデフォルトで必要と思われるPEARを同梱した。
その時に、必要なPEARの中でさらに必要とされているオプションなファイルが出てきたのでメモ。

// Log関連option
require_once 'DB.php';
require_once 'MDB2.php';
include_once 'Mail.php';

// HTTP_Download 関連option
include_once 'Archive/Tar.php';
include_once 'Archive/Zip.php';

// Text_Highlighter 関連option
require_once 'XML/Serializer.php';

この辺が出てきたのだけれど・・・Logについてはそもそもsocket拡張とかDBが使えない、メールも外に送れないような貧弱な環境がYBのデフォルトなので、DBへのログとかMail送信は想定しない。よって取り込まない。
HTTP_DownloadがTarとかZip圧縮用につかってるのは・・・これは無用。そのまま送るだけなので。取り込まない。
Text_Highlighterだけど・・・そうか。XMLか・・・。ビミョー。XML/Parserも出てきたんだけれど、これは入れておいたが・・・いっか。Serializerまでは。取り込まない。

他にもひょっとしたら異常時の動作で必要としてたのが出てくるかも知れないけど、それは出てきてから取り込もう。

あと・・・関係ないんだけれど、編集時に前回のChangeLogをデフォルトで入力済にしておくと便利かも。それに絡んでバージョンをUPるか現状に上書きかも、セッションで良いので最後の選択を覚えておいて欲しい。
というのは実際に実験で使ってると、ちょっとした一字一句の修正でもちょくちょく保存したりする。そうした時にわざわざバージョンUPするのもウザイので現状保存にしてるのだけれど、そうなるとChangeLogをうっかり空で保存してしまう可能性が出てくる。これは困るので、どうにかしたい・・・。
datatype毎の処理と絡むので、0.0.4への宿題かな・・・。datatype周りを綺麗にするタイミングがあるので、そこで調整してみるか・・・。