.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で簡単に扱えるようになるので、何かのお役に立てれば幸いです。