フレームワーク関連本

2007/10/14 | マイPHPメモ
最近PHPのフレームワークに関連する本が多くなってきたのでピックアップしてみた。Ethna、Symfony、Zend Framework、cakePHPと主要なところがそろっているので入門にはお奨めだ。mapleはないけど・・・多分主要ではないということなのか・・・。個人的には現状cakePHPを使ってはいるが、今後のことはわからないので少し買ってみるつもり。
お試しとして「PHPフレームワーク完全マスター」がいいかもしれない。だってZend Framework、cakePHP、Symfonyのおすすめ3点セットみたいな感じだからね。
まずはこれから買ってみるとしよう。

でも、実は個人的に、今後の大規模アプリはEthnaかも、と思っている。もちろん大本命はZend Frameworkで間違いないと思うのだが・・・だ。cakePHPは使いやすいし、mozillaだったかnetscapeだったか、そのあたりの構築実績もあるわけだから、大規模向けでも大丈夫なのだとは思う。
でもGreeの構築実績、というのも大きいし、開発者が日本人てのも大きいのではないかと思う。

さて、やっぱりPHPのフレームワーク、淘汰はされてきたけど、まだまだ先は見えない。情報を持ってる方がいたら教えて欲しい。

Xoopsイメージマネージャのバグ

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

現在Xoopsは旧安定バージョンを使ってるのだけれど、それでもバグがあるようだ。なぜ修正しないのか、それとも気づいてないのか(まさか)・・・不思議(それとも自分だけ?)。
モジュールを作ったりするときに、xoopsCodeTarea関数を使用すると、文字修飾なんかが簡単に出来るようになるが(お世辞にも簡単とは言えないけどね)、それにプラスしてイメージマネージャも利用できるようになる。イメージマネジャーを使うと簡単に画像をアップロードできたり、挿入できるようになったりする。
ここで「画像を挿入しようとイメージマネージャの画面を出したけど、希望の画像がなくてあらためてその画面でアップロードしようとした」ときにエラーが出る。エラーの内容は以下のとおり。

Notice [PHP]: Undefined variable: target in file imagemanager.php line 175

URLの引数で渡された値を使おうとしたけど定義されていない、という感じのエラー。修正はいとも簡単。ちゃんと定義しなおしてあげればいいだけ。このバグ、どうもPHPの設定で、register_globalsがデフォルトでonだった頃の名残のような気がする。

しかし・・・自分が変なファイルをダウンロードしてしまったのだろうか。少なくとも安定版なのだから、こんなバグありえないと思うのだけれど・・・。

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

2007/10/10 | マイPHPメモ

パラメータを確実に各ページで持ちまわるためのプログラムを作ってみた。
プログラムは「クラスで提供」ということで、使い方はこんな感じ。

最初に出力するHTMLを用意します。「そんなの別のライブラリに任せてるよ!」と言う場合はアウトプットバッファリング関数(ob_start、ob_get_contents)なんかでうまく取得してください。
というか、元々そういう仕様のプログラムにはめ込んだのでこうなってしまいました。プログラム自体は簡単なので適宜自分で書き換えてください。

include(‘relativepath.class.php’);
$pathObj=new relativepath(‘http://example.com/’);
$pathObj->convert($html);
$params=array();
$params[‘key’]=’value';
$pathObj->attache($params);
$newHTML=$pathObj->result();

なぜ出力予定だったHTMLを引数として与えるかと言うと、今回はoutput_add_rewrite_varを使っていて、ドメインつき絶対パスのリンクには自動処理されなくなるので、コンストラクタの引数でドメイン名を渡して、ドメインつき絶対パスをドメインなし絶対パスにおきかえる処理をしているためだ。

メソッドattacheをつかわなくてもいいので、別の用途にも転用できる。後日コメントをいれて、ソースのダウンロードをできるようにするけれど、とりあえず公開。

relativePath.class.php
—————————-
<?php
  class relativePath
  {
    var $topDomainUrl=false;
    var $html=false;
    
    function relativePath($topDomainUrl)
    {
      if(substr($topDomainUrl,-1)!=’/’){
        $topDomainUrl.=’/';
      }
      preg_match(“#(https?://(.*?))/#i”,$topDomainUrl,$match);
      $this->topDomainUrl=$match[1];
      return true;
    }
    
    function convert($html)
    {
      $converted=  ‘/';
      
      if($this->topDomainUrl){
        $targetText=$this->topDomainUrl.’/';
        $html=preg_replace(“#<([a|form]) (.*?)(“.$targetText.”)(.*?)>#i”,”<¥¥1 ¥¥2″.$converted.”¥¥4>”,$html);
        
        $targetText=$this->topDomainUrl;
        $html=preg_replace(“#<([a|form]) (.*?)(“.$targetText.”)(.*?)>#i”,”<¥¥1 ¥¥2″.$converted.”¥¥4>”,$html);
      }
      
      $this->html=$html;
      return true;
    }
    
    function attache($params=array())
    {
      foreach($params as $queryKey => $queryValue){
        output_add_rewrite_var($queryKey,$queryValue);
      }
      return true;
    }
    
    function result()
    {
      return $this->html;
    }
  }
?>

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用の画面だから)。ログイン後は直接記事ページに飛ばすだけでいいかな、と思う(管理画面へのリンクをはらないだけ・・・。

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


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