unzipと文字コード

最近、暇つぶしとノウハウゲットを兼ね、PHPプログラミングで遊んでいます。
とはいってもそんな難しいものを作っている訳ではなく、ファイルのアップローダを少し拡張したようなものです。
ちなみに、サーバは先日書いた玄箱で、apacheとともに動かしています。php4.2.3のインストは少し厄介だった気もしますが、大体apt-getでなんとかなったように思います。


さて、ファイルをまとめてアップする機能をつけるのに、圧縮したファイルをアップして解凍しようとしていました。
当初zipを使う事を考えていましたが・・・問題発生。Windowsで作った圧縮ファイルをアップし、unzipで解凍するようなスクリプトを組むと、ファイル名の日本語部分がおかしくなります。
Linux上はEUCだから、解凍後S-JISからEUCにかえりゃいいんだろ!と思われるかもしれません。そんな ふうに考えていた時期が私にもありました・・・。


色々調べてみましたが、どうも事は単純ではないらしく。そもそも、アップ・解凍したファイル名をnkfしてみたところで、読める文字にならりません。-e -s -jどのオプションもダメ。
なんか、圧縮したS-JISのファイル名を、解凍時に壊してくれるようです。他のコードは知らない。
http://www.coara.or.jp/~sudakyo/dasworksrpms.htmlに日本語ファイルに対応したunzipを作ってくださったものがありますが、玄箱ppcでrebuildしようと素人ながらやってみたものの失敗。


そんなわけで、圧縮形式を変えるという至極楽な手段に訴えました。
apt-getでlhaをインストして・・・解凍。快調。
zipばかりが世の中ではないと思い知らされた今日この頃です。


実はlhaコマンドの、解凍先ディレクトリ指定にも少し悩みました。調べてみると

lha [-]{axelvudmcp[q{num}][vnfodizg012]}[w=

] lzhfile [file...]

とお決まりのように書いてありますが、PHP内でsystem関数使って

lha x w=(DIR) (解凍したいlzh)

としてもうまく解凍できない。xをeにしてもだめ。

lha ew=(DIR) (解凍したいlzh)

のように、くっつけないとダメなようでした。