2

我有一个应用程序,我想用 CLI 和 Web 界面将其打包为 PHAR(它充当更广泛系统的 API,因此我想避免在两个 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 的 echo 进行调试:

$_SERVER['REQUEST_URI'] 
$_SERVER['REQUEST_METHOD']

两者都按预期返回,这些是默认存根中用于检查它是否在 Web 上运行的值。

我真的很茫然,想知道是否有人知道下一步该去哪里?

编写自定义存根是一种选择,但在幕后可能会出现问题,这会在以后让我绊倒。

任何建议将不胜感激 :)

4

0 回答 0