6

私は現在、フレームワークの拡張メカニズムを実験しています。各モジュールは、少なくとも1つのPHPファイル(単一のクラスを定義)とXSLスタイルシートで構成されていますが、他の複数のファイルが含まれる可能性があるため、すぐにPharsを使用することを考えました。

すべてがうまく機能していますcreateDefaultStub()が、次のスニペットのようにPharを使用せずに構築した場合、結果は4分の1のサイズになり、圧縮バージョンよりも小さくなります。

$phar = new Phar('Example.phar', 0, 'Example.phar');
$phar->buildFromDirectory(__DIR__ . '/src');
$phar->setStub('<?php __HALT_COMPILER();');
$phar->setSignatureAlgorithm(Phar::SHA256);
$phar->compress(Phar::GZ);

ファイルサイズの例:

8799 14 Dec 09:37 ExampleCog.phar (using createDefaultStub())
2143 14 Dec 10:08 ExampleCog.phar (using __HALT_COMPILER())
3373 14 Dec 10:08 ExampleCog.phar.gz (consistent with either method)

Pharは、モジュール固有のファイルをまとめて保持するために使用され、フレームワークに含まれます。スタンドアロンで実行しても、このコンテキストでは意味がありません。私の質問は、最小限のスタブコードを使用することで、もしあれば、何を見逃しているのかということだと思います。そして、なぜ圧縮バージョンは常に同じサイズなのですか?

4

1 に答える 1

8

私の質問は、最小限のスタブコードを使用することで、もしあれば、何を見逃しているのかということだと思います。

ファイル形式のドキュメントでは、デフォルトのスタブは次のように記述されています。

pharベースのPharアーカイブのデフォルトのスタブには、pharのコンテンツを抽出して実行するための約7kのコードが含まれています。

次に、 Phar::createDefaultStubをポイントします。

このメソッドは、pharアーカイブからスタートアップファイルを実行するスタブを作成するためのシンプルで簡単なメソッドを提供します。さらに、コマンドラインからとWebサーバーを介してpharアーカイブを実行するために、さまざまなファイルを指定できます。ローダースタブはPhar::InterceptFileFuncs()も呼び出して、ファイルシステムにアクセスするPHPアプリケーションを簡単にバンドルできるようにします。phar拡張子が存在しない場合、ローダースタブはpharアーカイブを一時ディレクトリに抽出してから、ファイルを操作します。シャットダウン機能は、終了時に一時ファイルを消去します。

デフォルトのスタブが非常に大きい理由であるため、強調が追加されました。常にPHP5.3以降で動作すると想定できる場合は、おそらくデフォルトのスタブは必要なく、最小限のスタブを使用できます。__HALT_COMPILER

そして、なぜ圧縮バージョンは常に同じサイズなのですか?

もう一度ファイル形式のドキュメントを詳しく見ていきます。アーカイブ形式の比較があります。これは、Pharがファイルごとの圧縮とアーカイブ全体の圧縮の両方を実行することを説明しています。gzipはデータをそれ以上圧縮できないため、同様の圧縮サイズが表示されている可能性があります。これは憶測です。

于 2012-12-15T22:15:16.440 に答える