mail-entry_0.4.0-test1リリースです

※※※※※※※※※※※※※※※※※※※※※※
2004/6/2追記 単純なバグが混入しています。
601行目
my $latestentry = $iter->(); or return ""; # いちばん最新のエントリ
となっていますが、
my $latestentry = $iter->() or return ""; # いちばん最新のエントリ
というように、()のあとの;(セミコロン)を消してください。
※6月7日0:27追記 修正済みのものをアップしました。この時間以降にダウンロードしたものであれば修正の必要はありません。バージョン番号並びに日付は変わっていません。
※※※※※※※※※※※※※※※※※※※※※※

test1とか付いてます。新機能の動作確認がほとんどとれていません。なぜならテストする環境がないから。
実際はVirtual PCでいくらでも作れるんですけどね~(汗)
かなり不安げなテスト版をダウンロードするにはここをクリック!test2を公開しました。こちらへ

新機能は以下の通りです。
  1. GD(グラフィックライブラリ)による画像縮小機能を実装しました
  2. 画像の自動縮小機能を実装しました(サムネイルではなく元画像を縮小します)
  3. エントリー本文のHTMLを、Setting節で設定できるようにしました

その他、バグ修正なども行っています。

一つずつ解説します。
1.GDによる画像縮小機能
今まではMTのライブラリを通してサムネイルの作成をしていました。そのため、ImageMagickかNetPBMが必須条件でした。
今回GDに対応したことで、必須条件が少しやわらいだと思います。ただし、jpeg以外には対応しません。条件は下記の通りです。
  • GDが使える(Ver.1.6.2で動作確認)
  • PerlのGDモジュール Ver1.26以上が使える
  • もしくはPHP4が使えて、PHPからGDが使える(書いててよくわからん)この場合、mail-entryが同時に実行されるとうまく動かない予想されます(テストしたわけではないですが。処理の流れ上問題ありそうです)。index.cgiやcronを使うなどして同時に実行されないようにしてください。

PerlのGDモジュールがインストールされていれば、GDも当然インストールされていると思われます。モジュールチェックスクリプトをいじって調べてみてください。
PHPが使えるサーバーならば、GDのバージョンチェックが出来ます。jpeg縮小に対応しているかも調べられます。
<?php
phpinfo();
?>
というファイルをinfo.phpとでもしてサーバーに置き、Webブラウザで開くと、GDの項目があります。JPG SupportがEnableとなっていれば、少なくともPHPからはGDが使えます。PerlのGDモジュールが1.26以上だと、Perlだけで完結できます。1.26はGDの1.6.3以上を必要とするはずなので、GDがそれ以下の場合はPerlからは使えないと考えて良いと思います。
私のところもGDのモジュールが古くてですね、PHPを使った方法が実装されているのはそのためです。逆に、GDモジュールによる動作の確認が出来ていません。これがtest1の所以です。
PHPを利用した場合の動作についてはある程度テストしてあります。でも複数画像の添付とか、そういえばチェックしてないなぁ(汗)
設定方法です。
  1. $useGDにGDのバージョンをセット
    1か2です。小数点以下は必要ありません。GDの2が使えると、品質が良くなるらしいです。バージョンが分からない場合はとりあえず1にしてください。ちゃんと動くのを確認したあと、試しに2にして動けば、バンザイと言うこと。ただし、2では動作確認できてません。うまく動いたら教えてください。
  2. サムネイル作成用に$resize_widthに値をセット
  3. Perl用GDモジュールがバージョン1.25未満の場合は、PHPを使うように設定します。そのための設定は
    1. $blog_urlにブログのURLをセット。index.htmlは付けない方が良いと思います。
    2. $usePHPに1をセット
    3. index.cgiを使ってmail-entry.cgiを呼び出している場合は、index.cgiを同梱のindex.cgi.forPHPに置き換えてください。拡張子.forPHPを消して、index.cgiと同様の設定をして、index.cgiのディレクトリに上書きコピーするだけです。mail-entry.cgiのURLを設定する項目が増えています。
    4. cronから実行している場合は、ちょっと大変です。まず、シェル(コマンドライン)からPHPスクリプトを実行できることが必要です。さらに、mail-entryの改造無しではできません。PHPコード生成部分を単独のスクリプトの形にして、画像を読み込むごとにスクリプトを実行させるようにします。需要があれば別エントリで解説するか、コードに組み込みますけど・・・当初はこの形で作って、シェルからはうまくいくのにブラウザからは動かなくて悩んですよね。まだ一週間前なのに、遠い昔のことのように思える・・・


2.画像の自動縮小機能
いつも画像をアップする時って、リサイズしてからアップしますよね。携帯電話のカメラでも最近はサイズ大きいですし。サムネイルを160x120にしたとして、元画像は800x600ぐらいがいいというパターン、多いと思います。
そんなとき。$original_resize_widthというSetting項目に800セットすると、横幅が800を超える画像をメールに添付した場合、横幅800になるように縮小してくれます。高さは自動計算します。もちろん、$resize_widthが設定されていればサムネイルも作られます。
ひと手間省けますよ~、ということです。ただその分サーバーへの負荷が増しますから、追い出されないように気を遣う必要がありますね。
設定方法は、$original_resize_widthに希望の横幅をセットするだけです。縦横の比率は保たれます。
3.エントリー本文のHTMLを、Setting節で設定
エントリー本文のHTMLを、Setting節で設定できるようにしました。
  1. $comment_positionに"style"をセット
  2. $comment_style_htmlにHTML文を記入
    本文を入れたい位置に<_cgi_mail_body>を、画像を入れたい部分に<cgi_comment>を置いてください。MTのスタイルシートに画像表示部分のスタイルをつくっておいて、それを使うようにここで設定すると、スタイルシートを変えるだけで過去投稿分も含めてデザインを変更できる、とか考えられます。あ、でも複数枚の画像を添付した場合はどうなるんだろう・・・
    また、<>の中にcgi_を付けてスクリプト内の変数名を$付けずに書くと、その変数のその時点での値に置換されます。画像の幅などの指定に使えます。
    この機能、The soliloquy of Aoiにて公開されているパッチがヒントになりました。柳葵さんありがとうございます!

4.その他バグ修正など
  • コマンドラインで実行すると分かるのですが、必ず警告が出ていました。それを修正しました。今まで気づいてなかった・・・
  • $commen_postionを$comment_positionに改めました。綴りが違ってました。以前に気づいたことがあった気がしますが、ようやく直しました。動作には全然関係ないんですけどね。

パッチを当てるときの注意点です。
Setting節にいくつか項目が加わっていますので、うまくパッチが当たらないと思います。いくつかの設定値をデフォルト値に戻すことで対処できると思います。以下にデフォルトに戻す必要のある部分を列挙します。
  • my $image_dir = "moblogimages"
  • @auth_mail = ('hoge@hoge.co.jp','hoge@hoge.or.jp')
  • $resize_width = 0
  • $comment_postion = "top"
  • $to_jcode = "utf8"

結構ありますね・・・
参考までに、追加される項目も列挙しておきます。
  • my $blog_url = "";
  • my $useGD = 0;
  • my $usePHP = 0;
  • my $original_resize_width = 0;
  • my $comment_position = "top"; <-新規ではないが綴りが違ってるので修正した部分
  • my $comment_style_html = <<"HERE";
    HERE

こ、これで全部かな?変更が多すぎて自分でも把握しきれてません。漏れがあったらごめんなさい。
PHPを呼び出す方法がずいぶん強引と思われるので、実際にどんな動作をするのか解説しておきます。
画像が添付されていると、PHPのコードをmail-entry内で生成します。ファイル名は画像ファイルのように適当な数字の羅列が付けられます。それをmail-entry.cgiからリダイレクトで呼び出します。system関数で呼び出したいのですが、それだと動作してくれないようです。PHPがモジュールモードでインストールされているとこうなるようです。普通はそうなのかな?処理が終わると、$blog_urlにセットされたURLにリダイレクトします。ですから、実行結果は一切表示されません。これはindex.cgiから呼び出された場合を想定しての仕様です。
index.cgi.forPHPも、同じようにリダイレクトを使用してmail-entry.cgiを呼び出しています。system関数で呼んでしまうと、PHPコードへのリダイレクトが出来ないからです。
流れはこうなります。index.cgi.forPHPをindex.cgiとして設置し、ブログのURLにアクセスすると、
  1. ブラウザが自動的にmail-entry.cgiを開く(リダイレクト)
  2. 画像が添付されていると、自動生成されたPHPスクリプトがブラウザによって開かれる(=実行される)。画像がなければ$blog_urlへリダイレクトされ、トップページが表示される
  3. PHPスクリプトが実行された後、$blog_urlへリダイレクトされ、トップページが表示される

こんな感じです。リダイレクトされている間、ブラウザは真っ白です。URL欄だけが刻々と移り変わっていきます。この方法の問題点は、mail-entry.cgiのURLが晒されてしまうということでしょうか。引数を受け取らないcgiなので問題はないと思いますけど・・・
悪意を持ってmail-entry.cgiを連続で開かれたら、設置したサーバーとPOPサーバーに過負荷を与えることになるでしょう。mail-entry側に前回実行時から何分以内なら実行しないという、index.cgiと同じコードを仕込めば大丈夫そうですね。今思いつきました。
さー、うまく動くかなぁ~
かなり心配です。うまく動いて、ImageMagickが使用できなくて悲しい思いをしている方が一人でも減るとうれしいなぁ。ま、mail-entryの設置が大変ですし、GDがインストールされているサーバーというのも結構な条件みたいですが・・・
どうなんでしょ?
しばらくtest版のまま公開して、動作報告が入りしだい、正式版になる予定です。動かなかったら修正ですね・・・。うまく動いたという方、動かなかったという方、環境などをコメント投稿してくださるとうれしいです。よろしくお願いします。
コメントを投稿

このブログの人気の投稿

トランシーバーアプリzelloにオススメの片耳イヤホンマイク

買っちゃった ASUSのスティックPC VivoStick TS10

家族カードの暗証番号が分からない