Pharは便利だけど `--enalbe-zend-multibyte`が有効だと文字化けしてしまう
タイトルのままです。以下にもう少し詳しく。
Pharは複数のファイルを1つのアーカイブにまとめることができ、読み込みも
<?php include 'sample.phar';
のように全体を読み込んだり
<?php include 'phar://sample.phar/config.xml';
のように個別にアーカイブの一部を使うこともできる便利な機能です。
PHP5.3からは標準で組み込まれるようになり別途インストールする必要がなくなりさらに身近な存在になりました。
詳しくは公式マニュアルをどうぞ。
PHP: Phar アーカイブの使用法: 導入 - Manual
というわけで、色々使えそうだということで色々試そうとしたのですがうまく動きません。
具体的には以下のようなpharを作るスクリプトでsample.pharを作成します。
create.php
<?php @unlink('sample.phar'); try { $phar = new Phar(dirname(__FILE__) . '/sample.phar'); $phar->setStub('<?php echo "test" .PHP_EOL; __HALT_COMPILER();'); } catch (Exception $e) { echo 'Cannot open file: ', $e; }
これを以下のように呼び出すと...
$ php create.php $ php sample.phar ?
本来は"test"という文字が表示されるはずが「?」になっちゃってます。
そして、macportsで入れたPHP5.3.3だと動き、自前でコンパイルしたPHP5.3.3だと動かないと。。。
ということはオプションに何かあるはずだと色々確認した結果、`--enalbe-zend-multibyte`を有効にしてPharアーカイブを使うと文字化けすることを確認。
ソースをSJISで書く必要がなければわざわざこのオプションを付けてコンパイルしないほうがいいということですね。余計なオプションは付けない。これ基本と。。
ただ、動かないのはおかしいような気がするのでbugレポートを書いてみました。
というわけで、Pharを使ってハマる方がでてきそうな気がするのでメモを残しておきます。