Symfoware

Symfowareについての考察blog

PHP pharで複数のソースファイルを1つのファイルにまとめる

Javaだとjar、Pythonだとzipimportのように、PHPで複数のソースファイルを
1ファイルにまとめられないか調べてみました。


phar



PHPだと「phar」で1つのファイルにまとめられるようです。
http://php.net/manual/ja/book.phar.php

composerもこの機能を使用して1ファイルで実行可能なファイルとして
配布されていますね。

使い方を調べていきます。




簡単なサンプル



まずは簡単なサンプルから。
こんなプログラムを作成しました。

・sample.php


  1. <?php
  2. require_once('lib/TestClass01.php');
  3. $clazz = new TestClass01();
  4. $clazz->call();




呼び出し対象のプログラム。

・lib/TestClass01.php


  1. <?php
  2. class TestClass01 {
  3.     public function call() {
  4.         echo 'TestClass01#call'.PHP_EOL;
  5.     }
  6.     
  7. }




sample.phpを実行すると、lib/TestClass01.phpのcall関数を呼び出します。


$ php sample.php
TestClass01#call





このlib/TestClass01.phpをpharにしてみます。





pharの作成



pharを作成するためのプログラムを作成します。

・makePhar.php


  1. <?php
  2. // TestClasses.pharという名前でpharを作成
  3. $phar = new Phar('TestClasses.phar');
  4. $phar->addFile('lib/TestClass01.php');




TestClasses.pharというpharを作成。
lib/TestClass01.phpを追加します。


これをそのまま実行しようとするとエラーになります。


$ php makePear.php
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'phar error:
unable to open file "lib/TestClass01.php" to add to phar archive' in /var/dev/php/phartest/makePear.php:5
Stack trace:
#0 /var/dev/php/phartest/makePear.php(5): Phar->addFile('lib/TestClass01...')
#1 {main}
thrown in /var/dev/php/phartest/makePear.php on line 5





pharの作成を許可するには、php.iniの設定を変更する必要があります。
今回、一時的に作成許可を与えたかったので、プログラムと同じフォルダにphp.iniを作成し、
実行時にそのphp.iniを指定することにしました。

・phar_make_php.ini


  1. [Phar]
  2. phar.readonly = Off
  3. phar.require_hash = Off




php.iniを指定してのプログラム実行はこうなります。


$ php -c phar_make_php.ini makePhar.php




これでTestClasses.pharが出来上がりました。





pharの使用



出来上がったpharにあるクラスを使うよう、sample.phpを修正します。

・sample.php


  1. <?php
  2. //require_once('lib/TestClass01.php');
  3. require_once('phar://TestClasses.phar/lib/TestClass01.php');
  4. $clazz = new TestClass01();
  5. $clazz->call();




実行してみると、pharを使用していない場合と同じ出力結果が得られました。


$ php sample.php
TestClass01#call





【参考URL】

Phar

pharアーカイブを作成

pharを使ってみる

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2016/07/31(日) 17:54:16|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PHP spl_autoload_registerでautoloadを自前で実装 | ホーム | jenkins パラメータービルドを使用して、データベースのバックアップを取得する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1904-ecc4b763
この記事にトラックバックする(FC2ブログユーザー)