CLI と Web インターフェイスの両方を備えた PHAR としてパッケージ化したいアプリケーションがあります (これはより広いシステムへの API として機能するため、2 つの PHAR アーカイブで同じライブラリを再生成することは避けたいと思います)。私が遭遇した「バグ」は、PHAR が createDefaultStub で作成されたときにコマンドラインから実行されたように常に動作することです。
<?php
try {
$phar = new Phar('myphar.phar');
$phar['cli.php'] = '<?php echo "CLI"; ?>';
$phar['web.php'] = '<?php echo "Web"; ?>';
$phar->setDefaultStub('cli.php', 'web.php');
// this is the same as:
// $phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
} catch (Exception $e) {
// handle errors
}
?>
上記のコードから直接取得した phar を実行すると ( http://www.php.net/manual/en/phar.createdefaultstub.phpコマンドラインから
php.exe myphar.phar
なるほど、さすが「CLI」ですが、これもウェブから見ます。
2010 年の文書化されたバグがありますが、未解決のようであり、多くのケースが利用可能ではないため、最終的に何か間違っているのではないかと考えています。
PHP バグ レポート: https://bugs.php.net/bug.php?id=52322&edit=2
試して診断するために私が行ったこと:
PHP 5.4.11、5.3.21、5.2.17 でテスト済み phar は各バージョンでも再作成されました。
最新の XAMPP をクリーン インストールしてみました。
PHP.ini 設定
detect_unicode = Off
phar.readonly = Off
phar.require_hash = Off
次の cli.php からのエコーでデバッグ:
$_SERVER['REQUEST_URI']
$_SERVER['REQUEST_METHOD']
どちらも期待どおりに返されます。これらは、Web 上で実行されているかどうかを確認するために既定のスタブで使用される値です。
私はここで本当に途方に暮れており、次にどこに向かうべきかについて誰かアイデアを持っているかどうか疑問に思いましたか?
カスタム スタブを作成することもできますが、後でつまずく可能性があります。
どんなアドバイスでも大歓迎です:)