15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pharアーカイブを作成

Last updated at Posted at 2013-10-08

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に自作スタブをセットする

15
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?