5月 28, 2009

PHP_Archive_Creator

とある要件で、複数のファイルを配布する必要が出てきた。
作業の都合上、PHPでインストーラを作れば便利なんじゃないかねと思い、そういえば、Pearのインストーラって、go-pear.pharだったよなと思い出した。

phar形式という、先頭に展開処理があって、後ろのほうにアーカイブがくっついている形式だ。
自己解凍ファイルと言えば解りやすいかも。

んで、pharファイルはどうやって作ろうか、と調べてみると、peclでpharモジュールを入れて、自前でアーカイブを作るページが出てきた。
うーん、やりたいことはgo-pear.pharみたいなことなんだよなぁ。

もう少し調べていると、pearのほうに、PHP_Archive_Creatorというのを見つけた。
アーカイブの作成から、最初に起動するphpファイルの指定まで出来るらしい。
これはすばらしい。

早速、アーカイブの作成処理を書いてみた。
addFile("./install_process.php", "index.php");

//stock( $phar, INSTALL_SOURCE );

// 保存するpharファイル名
$phar->savePhar("install.php");

function stock( &$phar, $dir_name ) {

foreach ( glob( $dir_name . '/*' ) as $filename ) {

$stockname = str_replace( INSTALL_SOURCE . '/', '', $filename );

print $stockname . "\n";
$phar->addFile( $filename, $stockname );
}

}
?>
そして実行すると、install.phpのできあがり。

しかし、これをブラウザから呼び出してみると、思いっきりPHPソースが表示された。
拡張子PHPの他のファイルはちゃんと実行されるのに。
さくらインターネットや@pagesにアップしてみたら、ちゃんと実行された。

ということは、開発環境のサーバが問題らしい。
ファイルの形式がおかしいにしても、拡張子PHPなんだから実行しようとしてくれたっていいのに、そこへも行き着いていない模様。
Apacheのエラーログもなにも出ず、アクセスログにHTTPステータス200が記録される。

一日ぐらい、あれやこれや試してみたんだけど、どうにも原因が分からないので、PHP-usersに投げる。

0 件のコメント:

コメントを投稿