Progress bar 実装

PHPでファイルアップロード時に進捗を表示するProgress barの実装をやってたりする。

PHP5のAPC(Alternative PHP Cache)で、ファイル送信時の情報取得が使えるようになったのだが、サーバがPHP4のシステムで動いているので、PHP5に置き換えられない。

PHP4とPHP5の同居が必要なのと、Apacheでモジュールを組み込むにしても、mod_phpは4と5を同時に組み込む事ができないので、それぞれを組み込んだApacheを動かす必要がある。

通常動かしているApacheとは別にもう1個別portで動かして、特定のURL以下をreverse proxyで置き換えなんてトリッキーなやり方で動作環境は確保した。

で、Progress barのソースサンプルを入手して実装しようとしたのだが、非常に難解な組み方をしていて、「何かあるな」という感じはしていたのだが、別に気にせず、原理を理解して、Ajaxのprototype.jsを使ってコードを書いた。

しかし、safariでテストした時、全然動かない。
非同期通信で呼ばれるPHPスクリプトのアクセスログが発生せず、Progress barを表示するページで、formにAjax.requestの処理の入った関数が呼ばれているかを吐き出すようにしてみると、ちゃんと呼ばれている。

しかし、Ajax.requestの行だけ、全く無視された状態になっていた。サンプルだと動く。サンプルは、ページ遷移しないか、一部が遷移するようになっていて、非同期通信でAPCの情報を取得しているのは、遷移しない部分…。

ここで、サンプルがなぜ難解な方法で組まれているのか全てを理解した。
APCの情報を取るのに、一部のブラウザではページ遷移が起こる場合、Ajax.requestなどの非同期通信のjavascriptコードが一切動かなくなるのだ。

根本的に構造の見直しが必要で、ほとんど一から作り直し(笑)

まあ、なんとかでっち上げつつあるが、今はIE6で後方互換モードでないと表示しないとかしょうもないブラウザのバグの対処に当たっている。

暫く、SI業から遠ざかっていたから動向を良く知らなかったが、Microsoftは相変わらず、世間に迷惑をかける実装を続けていたのか。実にMicrosoftらしいと感心する事しきり(笑)。

給油

20:30退社だったので、出光のスタンドが閉まってて寄れなかった。
上司は退社する時に「遅くまでお疲れ様」と言ってたが、20:30なんてIT土方基準だと、真昼間でございますよ。

しかし、20時に閉まるスタンドって使えんな…。

20090205.jpg走行距離 196.9km
給油量 69.00L
燃費 2.85km/L
単価 117円/L
総額 8,073円

燃費の最低記録を更新ですよ orz

まあ、これには心当たりがあって、朝の暖気が20分とかやってしまってるからこれが効いてる気がする。本当は10分程度で出るつもりが、急にもよおしたりして、遅くなるんだな。