あるwebサービスを作ろうとして、LZHファイルの自動展開が必要になったので方法を調べて試行錯誤していましたが、難しかったのでメモします。
PHPからはexecコマンドを使って、コマンドプロンプトと同じ仕様でwindowsプログラムを走らせることができます。
まず、本家本元lha.exeを使用しようと思って、こちらのlha255.exeをダウンロードしました。
ところがスクリプトを走らせてもうんともすんとも言いません。
エクスプローラー上からlha255.exeをダブルクリックしてみました。
がっくし。64ビットマシンでは使えなくなったようです。
次に、既にPCにインストールして毎日使っているwinrarが使えるか試してみました。あまり知られていませんがwinrarはコマンドラインからも実行が可能です。右クリックメニューだけではないのです。
W150724.lzhというファイルを解凍したいです。getcwdなる関数がカレントディレクトリをゲットするスペルであることが分かりましたので、次の呪文を唱えてみました。
$cd = getcwd();
$cmd = “C:\\Program Files\\WinRAR\\winrar.exe x {$cd}\\W150724.lzh {$cd}”;
exec($cmd);
何もおこりません。コマンドプロンプトから実行するとうまくいくのに、PHPからは効果がありません。マホトーンでもかかってるのかしら。
しょうがないので次は単独のexeでかつコマンドライン上で使えるソフトを探しました。すると次のサイトで「lhact」というプログラムを発見しました。
Allergy Design Office プログラミング、無線LANからイタリアンまで
これを使い、スクリプトと同一フォルダにlhact.exeを置いて、呪文を唱えてみました。
$cmd = “lhact x W150724.lzh”;
exec($cmd);
今度は上手くいきました。ファイルが解凍されていることを確認できました。解凍してファイルが出来上がるなんてスーパーマリオ3のワールド6でファイアボールを使ってコインをゲットしてるみたいですよね。
というわけで、Windows8.1(64bit)環境でPHPを使いLZHファイルを解凍したいというとてもマイナーな人には、lhactを使うことをお勧めします。