PHPを実行ファイルに(bamcompile)

古いツールなので今更感がありますが、便利でしたので!

bamcompileとは

PHPを実行ファイルにしてくれるツールです。ただし最終バージョンが2006年なのでPHP4で動いています。
処理的にはPHP本体が中に入っていて、PHPを読み込んで動いている感じです。

bamcompileのダウンロード

http://www.bambalam.se/bamcompile/

上記からダウンロード可能です。

PHPモジュールのダウンロード

標準だとmbstringが使えないのでダウンロードします。PHP4で動いているのでPHP4のWindows版のモジュールを利用します。

http://jp.php.net/releases/

上記から4.4.6のWindows binaryをダウンロードします。

プロジェクト構成

bamcompileの中にサンプルが入っているので、見てみます。

examples
├─gif2png
│  │  compile.bat
│  │  rambo.gif
│  │  
│  └─gif2png
│          gif2png.php
│          php_gd2.dll

compile.batはコンパイルを行うためのバッチファイルで、引数でコンパイルの実行をしています。

..\..\bamcompile -c -e:gif2png\php_gd2.dll gif2png.php gif2png

rambo.gifはサンプル画像です。ランボーの画像勝手に使っていいんだろうか。。。

gif2pngフォルダ以下が内部に取り込まれるファイル置き場になります。

gif2png.phpは実際のプログラムです。基本的に普通のPHPがそのまま動きます。

<?

print "\nGIF2PNG - Convert gif files to png\n\n";

if($argc==1)
{
	print "Usage: gif2png infile.gif [outfile.png]\n";
	exit;
}

$infile = "";
$outfile = "";

while(list($nr,$val)=each($argv))
{
	if($nr>0)
	{
		$val = strtolower($val);
		if(strpos($val,'.gif')>-1)$infile = $val;
		else if(strpos($val,'.png')>-1)$outfile = $val;
	}
}

if($infile == "")
{
	print "You must specify a gif file to convert!\n";
	exit;
}

if($outfile == "")$outfile = str_replace('.gif','.png',$infile);

$img = imagecreatefromgif($infile);
imagepng($img,$outfile);
print "$infile converted to $outfile!\n";

?>

中身はコマンドプロンプト用のツールみたいですね。

php_gd2.dllが読み込むPHPモジュールです。

プロジェクトファイルを利用する場合

─test
   │  bamcompile.exe
   │  compile.bat
   │  project.bcp
   │  
   └─dir
           php_mbstring.dll
           project.php
           project_sub.php
           icon.ico

こんな構成がおすすめです。

project.bcpはプロジェクトファイルになります。引数として与えることも可能ですが、わかりにくくなるのでプロジェクトファイルとして渡します。

mainfile project.php
outfile project.exe
embed dir
extension dir\php_mbstring.dll
DONTENCODE
ICON dir\icon.ico

重要なのがDONTENCODEで、PHPファイルをエンコーディングしないオプションです。日本語が入っている為かもしれませんが、エンコーディングするとforeachなどがうまく動かない場合がありました。
embedで指定したフォルダの中身はすべて実行ファイルに取り込まれます。
PHP内部からrequire_onceなどで読み込む場合などは、ここに入れておきましょう! 実行ファイルが大きいのが気になる人はCOMPRESSオプションで圧縮したり、DOS窓いらない人はWINDOWEDをつけましょう。

ちょっと気になる挙動

mainfileと同じPHPが出来上がった実行ファイルと同じ場所にあると、内部に取り込んだPHPではなくて、同じ場所にあるPHPを実行します!
DONTENCODEをつけないでPHPファイルが壊れた場合、同じ場所にPHPファイルがあると動くけれど、実行ファイルだけコピーすると動かなくなる挙動がでて焦りました。

総括

PHP4ではあるが、非常に便利なツールです。
ちょっとした画像の編集やツール作成などでは便利に使えるのではないでしょうか。おすすめはエクセルやPDF系のツールです。後日エクセルを読み込んでテキストに吐き出すツールについて記述をしてみたいと思います。