.LHA圧縮ファイルをPHPで解凍する方法

こんにちは、ヱビス(@evisu_phper)です。

今回、株式情報を取得する際に、拡張子が「.lzh」だったので素直にシステムに取り込むことができませんでした。

そこで、PHPで「.lzh」ファイルを解凍するプログラムを作成するにあたって、対応した内容をまとめておきます。

はじめに

CentOS7の公式リポジトリには、「.lzh」ファイルを解凍するために必要な「LHA」のインストールファイルがないため、GitHubからダウンロードして利用します。

・LHAのGitHubURL
https://github.com/jca02266/lha

・ローカル環境
PHP7.2
CentOS7.4

LHAファイルのダウンロード

$ cd ~
$ wget https://github.com/jca02266/lha/archive/master.zip
$ unzip master.zip
$ cd lha-master

「wget」コマンドが使用できない場合はyumよりインストールを行ってください。

$ sudo yum install wget

■makeファイルを作るための設定
念の為、makeファイルを作成するための「automake」と「autoconf」をyumでインストールします。

$ sudo yum -y install automake
$ sudo yum -y install autoconf

configureを実行する

ユーザーのホームディレクトリ配下に、インストールをするのでprefixを「$HOME/usr」として設定します。

$ aclocal
$ autoheader
$ automake -a
$ autoconf
$ ./configure --prefix=$HOME/usr

makeを実行する

最後に、makeコマンドを実行して「LHA」をインストールします。

$ make
$ make check
$ make install

エラーが発生しなければ、これでインストール完了です。

最後に、パスを追加しておきます。

$ export PATH=$HOME/usr/bin:$PATH

lhaコマンドを実行してみる

実際に、「.lzh」ファイルを解凍してみましょう。

$ lha x [.lzhファイル名]

これで、CentOS内で「.lzh」ファイルの解凍ができます。

PHPで「.lzh」ファイルを解凍する

PHPでは、「exec」関数を使って解凍するのが簡単です。

<?php
exec("/home/[プログラム実行ユーザー名]/usr/bin/lha xw=[解凍したファイルを保存するパス] [解凍したいlzhファイルのパス] 2>&1", $array);

var_dump($array);

「exec」関数を利用するときは、絶対パスで「lha」コマンドを実行します。

PHPで実行する場合は、実行されたPHPプログラムファイルがある場所に。解凍したファイルが展開されるので、予め「w」オプションで展開先を指定します。

エラーが発生した場合は、変数「$array」に保存されます。

まとめ

圧縮ファイルといえば、「zip」なのですが、株式情報を集めていると「.lzh」に遭遇することがあり、焦ってしまいました。

今回ご紹介した方法であれば、「.lzh」でもPHPで簡単に扱えるようになるので、何かのお役に立てれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です