pharを使ってみる / pharアーカイブを作成 / pharでWebアプリを作ってみた
前回pharアーカイブを読み込みましたが、今回はそのpharアーカイブを作成してみます。
Pharクラスにはなんかすごい数のメソッドが詰まっていて一見よくわからないのですが、実際使うメソッドはほとんどありません。
Phar::getModifiedとかどんなときに使うんだよって話ですよ。
まず必要なのはphp.iniの設定変更。
pharの作成を公開サーバで行う必要は皆無なので、デフォルトでは禁止されています。
phar.readonly = 0
phar.require_hash = 0
を設定することでpharアーカイブの作成が可能になります。
では作成。
<?php
$phar = new Phar('TestClasses.phar', 0);
$phar->addFile('TestClass1.php');
$phar->addFile('TestClass2.php');
$phar->addFile('TestClass3.php', 'subdir/filename.php'); //別名で保存
$phar['TestClass4.php'] = file_get_contents('TestClass4.php'); //配列形式でも保存可能
$phar->addFile('mushroom.gif'); //PHP以外も保存可能
ファイル'TestClasses.phar'に5ファイルを詰め込みました。
これが前回使ったファイルの中身です。
実に簡単ですね。
いったん作ったpharアーカイブは、普通のファイルと同じようにファイル操作関数で操作が可能です。
画像ファイルをrequire_once()したりすると当然エラーになります。
<?php
require_once('phar://TestClasses.phar/TestClass1.php');
require_once('phar://TestClasses.phar/TestClass2.php');
require_once('phar://TestClasses.phar/subdir/filename.php');
require_once('phar://TestClasses.phar/TestClass4.php');
print(file_get_contents('phar://TestClasses.phar/mushroom.gif'));
Phar::addFile()
の第二引数を指定すると、指定した別名で保存できます。
呼び出しすときも別名での指定となります。
またPhar::addFile()
のかわりに、$phar['TestClass4.php']
のように配列でも保存可能です。
今回はテスト用のどうでもいいデータでしたが、実際に活用されているものとしてはgo-pearとかcomposerがあります。
画像はΞCandiedΞ様のフリー素材を使用させていただきました。
2014/12/14追記
デフォルトで作成されるソースはやたら汚いので、自作のものに差し替えるとよいかもしれません。
参考:Pharに自作スタブをセットする