読者です 読者をやめる 読者になる 読者になる

六帖のかたすみ

DVを受けていた男性。家を脱出して二周目の人生を生きています。自閉症スペクトラム(受動型)です。http://rokujo.org/ に引っ越しました。

Windows8.1(64bit)+PHP環境でLZHファイルを解凍したい

プログラミング

あるwebサービスを作ろうとして、LZHファイルの自動展開が必要になったので方法を調べて試行錯誤していましたが、難しかったのでメモします。

PHPからはexecコマンドを使って、コマンドプロンプトと同じ仕様でwindowsプログラムを走らせることができます。

まず、本家本元lha.exeを使用しようと思って、こちらのlha255.exeをダウンロードしました。

www.csdinc.co.jp

ところがスクリプトを走らせてもうんともすんとも言いません。

エクスプローラー上からlha255.exeをダブルクリックしてみました。

f:id:happyholiday:20150726100303p:plain

がっくし。64ビットマシンでは使えなくなったようです。

www.diana.dti.ne.jp

次に、既に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を使うことをお勧めします。