URLに自動でパラメータを付加する(その1)

2007/10/09 | マイPHPメモ

PHPで、各ページにおいて、パラメータを「確実に」持ちまわりたい。
そういう仕様を満たそうとちょっと試行錯誤中。

PHPには便利な関数「output_add_rewrite_var」というのがあって、これで値をセットすると、session.use_trans_sidのように、AタグとFORMタグで透過的にパラメータを付加してくれる。しかし・・・、これまたsession.use_trans_sidと同じように、絶対パスで書かれたリンクには自動付加がされない。

最近のブログツールやCMSでの出力処理では、大抵の場合絶対パスでリンクなどが出力されるので、こういうカスタマイズをしたいときは、普通の処理では難しい。んで、ちょっと調べてみたら、やっぱり同じようなことを考えている方がいらっしゃって、スクリプトが公開されていた。
http://schaf.ti-da.net/e1669157.html

こちらではoutput_add_rewrite_varは使わず、逐一手作業で組み込まれているような感じだ。だからoutput_add_rewrite_varが動作しない(旧バージョンの)PHPでも大丈夫だ。でも、自分の場合は、それほど古いものを使うつもりがないので、output_add_rewrite_varを使ってもっと簡単に記述できそうだ。

プログラムとしては、バッファリングをオンにし、出力までにバッファを変数に格納していったんバッファをクリア、出力データから絶対パスを取り除きたい箇所を正規表現でうまく取り出して、最後にoutput_add_rewrite_varして出力、というような流れ。頭の中ではだいたい構想は出来ていて、最低限のサンプルスクリプトをつくったらちゃんと動作している模様。あとはこれを作りこむだけ。

このプログラムは業務上必要なので、さっさと作ってしまわねばならない。これができると・・・携帯で自動的にセッションIDをもちまわるのに、非常に便利な関数になってくれると思うのだけど・・・さて、いかに。

さらに・・・WordPrssで携帯対応

2007/10/08 | SNS/CMS/ブログ

WordPressで、さらに携帯閲覧の機能も必要になった。こちらもプラグインは豊富にあるので問題ない。共通のURLにアクセスすれば勝手にPCと携帯で振り分けてくれる。
しかし重要なのは携帯対応+閲覧制限の両方が必要なことだ。WordPressは基本としてクッキーで認証管理をしているようなので、結局いくつかカスタマイズの必要性がありそうだ。

(1) ログインしているかどうかのチェック
 WordPressはクッキーでログイン状態を管理しているので、チェックルーチンに振り分けが必要だ(ノーマル状態ではクッキーが有効でないと認証ルーチンより先に進めない)。これはセッションを使うことになるかな(セッションIDを引数として持ちまわるしかなさそう)。

(2) ログイン画面の振り分け
 基本的にWordPressはUTF-8で動作しているので、当然ログイン画面もUTF-8だ。携帯だとSJISで出力しないといけないので、このままでは文字化けしてしまう。だからログイン画面自体はPCと携帯で振り分け処理をおこなわないといけない。

(3-1) ログイン処理
 WordPressはクッキーで認証管理をしているわけだから、携帯用のログイン処理を書かないといけない。認証OKならセッションに認証済みの状態を書き込む、と。

(3-2) プロフィールの編集はできない
 携帯閲覧用プラグインを入れたとしても、携帯での記事閲覧が可能になるだけで、ログイン後の自分のプロフィール編集は出来ない(だってプロフィール画面はPC用の画面だから)。ログイン後は直接記事ページに飛ばすだけでいいかな、と思う(管理画面へのリンクをはらないだけ・・・。

それでも・・・やっぱり開発工数は少ない。
がんばろっと。

WordPressの閲覧制限プラグイン

2007/10/07 | SNS/CMS/ブログ

ある案件で、「認証による制限をかけたい」というリクエストをいただいた。現状はserendipity(ブログCMS)を使って構築していて(昔はよく使っていたから)、serendipity自体にもプラグインとして認証を組み込むルーチンはあるが、その選択肢は少ない。Basic認証かLDAP認証という2つのプラグインしか見つけられなかった。
これを機会に・・・ということでWordPressに乗り換えることにした。WordPressは古参だけあってプラグインも豊富だ。今回はWordPressへの登録ユーザを利用して認証をおこなうregistered-onlyというプラグインを使ってみることにした。ダウンロードして、ソースコードを見て驚いた。コメントを除けば実質プログラムは6行しかない。

<?php
  function carthik_bouncer() {
    if (substr($_SERVER[‘SCRIPT_NAME’], -12) != “wp-login.php”) {
      auth_redirect();
    }
  }
  add_action(‘init’, ‘carthik_bouncer’);
?>

関数を定義して、コールバック関数でその関数を呼び出す場所を指定している(と推測してみた)だけだ。このプログラムを参考にすれば、もうちょっと工夫したルーチンを書くことが出来そうだ。
当初の予想からずいぶん工数が減った。ラッキー♪。

n番目の文字1つを取り出す

2007/09/26 | PHPの基本

phpでn番目の文字を取り出したいとき、ついさっきまでは以下のように記述するしかないと思っていた。

$str=’abcdefgh';
$char=substr($str,3,1);

こうすると$charには「d」が格納される(phpでは最初は1ではなく0から始まることに注意)。しかしもっと簡単な書き方があることを知った。

$str=’abcdefgh';
$char=$str{3};

なんと、こんな書き方でも同様の結果を得ることが出来る。マルチバイト系ではうまく動かないような気もするが(未検証)、これは簡単だ。多分関数を呼ばない分だけオーバーヘッドも少なく、処理速度も速いだろう。
少しだけ賢くなった。

サムネイル生成時の日本語文字化け

ウェブページのサムネイル生成プログラムがうまく動いて気をよくしていたが、新規にインストールしたCentOS4.2環境では日本語(漢字だけ)が文字化けしてしまった。1文字が四角の中にごちゃごちゃと文字がはいっているようなのに置き換わっている。いろいろ調べたら、これは日本語フォントがインストールされていないときにおきる症状とのことがわかった。今回OSのインストールは、サーバ用途のため、すべて英語を使用するという設定でインストールしたことが原因だろう。
調べたらインストール方法があったのでやってみた。

# wget http://www.grass-japan.org/FOSS4G/ipafonts/grass5.0.3_i686-pc-linux-i18n-ipafull-gnu_bin.tar.gz
# wget http://www.grass-japan.org/FOSS4G/ipafonts/grass5_i686-pc-linux-i18n-ipafull-gnu_install.sh
# sh grass5_i686-pc-linux-i18n-ipafull-gnu_install.sh grass5.0.3_i686-pc-linux-i18n-ipafull-gnu_bin.tar.gz /tmp/grass5 /tmp/bin
# mkdir /usr/share/fonts/ja/
# mkdir /usr/share/fonts/ja/TrueType/
# mv /tmp/grass5/fonts/*.ttf /usr/share/fonts/ja/TrueType/
# sh /tmp/bin/grass5uninstall.sh
# mkfontdir
# mkfontscale

まぁ、フォントは何でもよかったのでIPAフォントで。ウェブにあった記事をそのまま参考にして、適当にインストールしたら、なんとなく動いた。これで漢字も文字化けせず、正しくサムネイルが生成されることを確認できた。

今回サーバ用途向けのパッケージングでインストールして、正常に動作させることが出来たので、おそらくVPS環境で問題なく動作させることが出来ると思われる。早速準備して、サービス開始を目指すことにする。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net