multipartの解析部分の変更
まだうまく行ってるのかどうか疑問だけど、multipart解析部分で、今回変更したのは。
/usr/local/lib/perl5/site_perl/5.8.6/CGI/Lite.pm
の中の
sub_parse_multipart_data
から、
current_bufferに対して正規表現で disposition header body を取得する部分。
出力用ファイルハンドルを変更する部分(CL00がすでに使われていたら、インクリメントしてファイルハンドルを変更する)
を取り込んでみた。
ファイルハンドルを変更するところは、use strict 環境下では、ブロック内で
no strict 'refs'
が必要。
自作ルーチンでは、disposition データ部分の切り分けで失敗することが多かった、ようなので、すでに枯れて落ち着いてる車輪を導入。
mod_perl下でメモリのキャッシュの挙動がよくわからんし、同時アクセス制御にもなるだろう、ということでファイルハンドルの変更を導入。
といった感じか。
multipart/form-dataを使って、画像などのアップロードするCGIはこのやり口が定番、らしい。Mac版IE5.23のバグも吸収してるっぽいし、これで安定してくれるといいんだけど…。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ぼーっと週末。
相変わらずmultipartの解析がうまく行ってないようで、アップロードされた画像が壊れてるケースが、特にMacとMSIE5.23の組み合わせで頻発する。
自作のサブルーチンのバグ。今日は天気も天気だし、プール疲れが残るので、図書館に行ったぐらいであとは部屋でぼーっといちんち、だ。なので、バグ部分とにらめっこ。(ちなみに、今日初めて知ったんだけど、地元の図書館には「ハヤカワミステリ」の棚があって腰が抜けた…マニアック過ぎ)
CGI.pmとかCGI_Lite.pmとか、あちこちにあるリソースを覗いて回る。
たぶん、該当するところ。わたしがsplitで分けてから場当たり式にふりわけてるところを、どのモジュールも正規表現一発で済ませてる。なるへそ(死語)と思い、それをそのまま拝借して入れたら、特に問題なくアップロードはできる…。んだけど、従来の自作ルーチンでもわたしの環境下では問題ないんだよなぁ。
でもって、Lite.pmあたりは、バッファの上限をつけて、読み込みを分けてるんだけど、これって意味があるのかな。Content-lengthで最大サイズに制限かけてるから小分けにする意味がないような…。
あとは、もしかするとmod_perlのバッファがなにか干渉してるかも、とか、出力のファイルハンドルを細工しなきゃいけないのか、とか。
いろいろ試してみるんだけど、Macなんて持ってないのが困ったちゃんだぞ、おれ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ぶーさん
今日は久しぶりの武蔵小金井。
駅前再開発のため、お気に入りのカレー屋さん「ぷーさん」が17日で一度立ち退きとなる、とのことで慌てて食いにいってきた。
相変わらずうまかったっす。
で、↓はちょっとメモ
-------------
Mac 版の MSIE で boundary の扱いが少し違っていた以外は致命的な差はあり
ませんでしたが、Mac 版の Netscape は filename を url エンコードしてい
たので、自動デコードするようにしました。Mac の MSIE 以外の Mozilla と
して判定していますが、もし 4.5 というバージョンや PPC 等にも依存するよ
うな事があれば、お知らせして頂ければありがたいです。
また、Windows については filename をフルパスで返すようです。これは自動
で削除して他のプラットホームに合わせた方が扱いやすそうですが、勝手に削
除するのもかえって不親切かもしれないので、とりあえずそのままにしてあり
ます。この件についても利用者のみなさんのご意見を伺えるとありがたいです。
最後に、やはり結構面倒なのが Mac です。以下、Mac のファイルとは無関係
な方は読み飛ばして下さい。
まず、Netscape はデータフォークのみをアップします。これはテキストや画
像データをアップする場合等にはサーバー側でそのまま利用できるので便利で
す。しかし、アプリケーションやリソースフォークも必要なデータファイルの
場合は、ファイルが壊れるという事になります。
もっとも、そのようなデータを生でアップする必要性というのはほとんど無い
でしょうから、この場合には一度アーカイブし、それをアップするという事で
対応するのが良いでしょう。
次に、MSIE ですが、こちらは MacBinary をアップします。user_agent で
MSIE を判定せずとも、content_type で確認できます。
MacBinary でアップされるため、そのまま別ディレクトリ等に移動して公開す
るには便利ですが、一方、テキストや画像データの場合は、適当なツール(確
か、Debian 等にもあったような)でデータフォークを取り出してやる必要があ
ります。
まあ、とりあえず、通常は Netscape でアップしてもらうのが簡単そうですね
-------------
なにしろ、MSIE for Macintosh は、過去に
HTTP_USER_AGENT に「インターネットエクスプローラ」と、
しかも「半角カナ」で返す
という、USER_AGENT 業界(笑)に金字塔を打ち立てたシロモノですから、
strcmp() も大変だあ。
# MSIE 3.x の一部が、FORM の INPUT ごとに日本語キャラクタセットが違う、
# ってのもあったな
--------------
[23:08:38]
Macは例外が多いみたいで、泣かされる。該当機種・ブラウザ・OSを持ってれば、調べて対応するのは、たいしたことじゃないんだけど…。
みんなに使ってもらおうと思うといろいろ出てくるですね。ごめんなさい、で、対応しきれない部分も出てきそうだなぁ。
[2006/05/15 11:46:39]
body部が取れてなくてUAがMSIE、MacならContent-Typeで区切りなおし。
if( ! $body && $ENV{'HTTP_USER_AGENT'} =~ /MSIE.+Mac/i){
($header, $body) = split(/Content-Type.+\r\n/i, $c, 2);
}
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
mod_perl2のキャッシュに悩む
perl の time で処理していたところ、mod_perl2 のレジストリ環境だと、$now=time などとやってグローバルに使うとちょっと不都合。意図せずキャッシュされてうまくない。まったく同じ時間、というのが頻発するのだ。どうやって避けるのか、もしくは、キャッシュを吐き出させるのか、ぐーぐる様にたずねても今いちぴんとこない。なもんで、timeの出力をintで受けていたテーブルをすべてtimestampに直してみた。…って、これだけでえらい騒ぎ。
current_timestamp というのが今の時間を出す定数と書いてあって、コマンドラインで試すとなるほど、そのとおり。ところが dbi で使うとinsert と updateで使えない。current は、もうサポートしてないよ、とエラーで止まる。同等の now() を使えば大丈夫だったんだけど、where句の中では current_timestamp + ... というのは使えるから混乱した。しばらくハマった。
日付計算までpostgresqlにやらせるのもどうだろ、と思うんだよなぁ。もちろん、使い慣れてるから、perl の time でやってしまいたいってのが本当なんだけど、こないだから言ってるように、perl と postgresql の棲み分けのことも。読み書き検索といった足腰部分をpostgresqlで、表示加工や細かいところは perl で、と意識はしてたつもり。ある日数が経過してるから色を変えてみる、なんてのはそれこそ perl の細かい仕事だろう。読み書きで忙しいpostgresqlにそんなどーでもいいところまでやらせていいのかと。
今日、小諸そばのおやじに、はじめて、「毎度」と言われてちょっと照れる。たぬきに油揚げをトッピングしたり、わかめをトッピングしたり、毎度定食モノじゃないので目をつけられていたかもしれんなぁ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
冷たい雨の週末はひきこもる
激しく冷たい雨模様。自治会の集金に回って、クリーニングを取りにいって。あとは部屋でごろごろのったり、だ。
Net-Amazonを使って検索する場合、isbnコードだと割りとすんなり早く帰ってくるんだけど、キーワード検索だとちょっと待たされる。短気だと多分、ばしっと切る程度には遅い。って、わたしがそうなんだけど。
こんなもんか、と思えば待つんだけど、初めてだと不安になる。というところか。なもんで、一度検索されたら、一時的にデータベースに放り込んでおいて、検索があったらまずはデータベースを見て、それでなければアマゾンにいく、という方式にした。データ数で1万件、日数で30日、どのぐらい溜め込んでおけばいいのかは、やりながら調整、だなぁ。
これで、シリーズ物・巻数モノの入力がラクになる。タイトルを入れて検索して、チェックボックスをつけて表示させればあとはなんとかなる、かな。
そいや、昨日ジブリ美術館でジブリがいっぱいスペシャル・ショートショートというDVDを買ってきた。TVCMとかプロモビデオとか。後半、なんじゃこりゃ、みたいなのが入ってて、ちとアレだったけど、前半は面白いものばかりだった。脱力系もうまいんだなぁ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
mod_perl は難しいっす
また新たにページ作りが飛び込んでくる。うううむ、今度は難題かも。あわてて本屋に走ってデザイン系の本・雑誌を購入してみる。ネットで検索して出てくるような内容だろうけど、こういう焦り気味の時、紙媒体の手軽な一覧性は大きなアドバンテージだなぁ。
今度はシンプルなものにしたいぞ。
メモ
昨日からModPerl::Registry環境で出るエラーに悩む。
execute on disconnected handle at ****** line 124
アクセスして一度目はエラーはなし、次のアクセスで確実にエラーとなり、さらに次のアクセスは問題なし。
ModPerl::PerlRunだとエラーにはならない。これはModPerl::Registryの現象なのかなぁ。…って、よく分かりもしないド素人のくせに情報の少ないmod_perl2にしたバチが当たったか。
接続が切れてるのにexecuteするのは無理っ。というエラーだろうから、disconnectをコメントアウトしてみる。スクリプトが終了すれば勝手に処理して disconnect してくれることを期待だ。案の定エラーにはならないけど、ps axするとpostmasterがアイドル状態でいくつも残ってる。いくらなんでもこりゃまずい。
apache2 に mod_perl2 って本当に情報が少なくて悶絶。本屋で見たオライリーのapache拡張本は、もう5年も前の初版でApache::Registry。
とりあえず。
$r = $dbh->ping;
if( ! $r ){コネクト処理}
というのを、いちいち入れたらエラーは出ない。…けど、大丈夫なんかい。要調査続行。
[21:06:01]
そいや、見よう見真似でゾーンファイルも書いて、置いてみた。しかし。こいつはわからん。オライリーのを買おうかと思ったら5000円超。…オライリーのはどれもこれも、しょーもないジョークがいいので、欲しいんだけど。吉野家と小諸そばとさくら水産でもってる身としては(高脂血症の診断が出てから吉野家は却下してるけど)なかなか手の出ない値段設定なんだよなぁ。
- 『おかえりください』サウンドノベルWINDOWS版
- 『おかえりください』本編を加筆修正、6つのバッドエンド分岐シナリオを追加してサウンドノベル化!
音と映像が、血まみれのこっくりさんの惨劇を蘇らせる。 - 【無料体験版】はこちら
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」