2

这有点奇怪,所以请多多包涵。

我正在尝试在我们的自定义平台上启动并运行 Bugsnag。

样板代码如下所示:

if ( !include_once($NP->settings->paths->external .'/Bugsnag/guzzle.phar') ) 
  exit('Failed to load ERROR: guzzle');
if ( !include_once($NP->settings->paths->external .'/Bugsnag/bugsnag.phar') ) 
  exit('Failed to load ERROR SYSTEM: bugsnag');

不幸的是,这引发了一个异常:

Fatal error: require(): Failed opening required 'phar://guzzle.phar/autoloader.php'

但是,如果我尝试在我们的平台之外加载它,它似乎可以正常运行。

由于我并不完全熟悉使用 phar 的来龙去脉,我们可以设置什么会干扰 phar 在其自己的容器内引用的能力?

信息:

Ubuntu 16.04.2 LTS
PHP 7.0.18-0ubuntu0.16.04.1 (Phar is native)

Phar EXT version: 2.0.2
Phar API version: 1.1.1
Phar-based phar archives: enabled
Tar-based phar archives: enabled
ZIP-based phar archives: enabled
gzip compression: enabled
bzip2 compression: disabled
Native OpenSSL support: enabled

phar.readonly: On
phar.require_hash: Off

任何帮助将不胜感激。

谢谢!

更新:在与同事进行一些测试后,我注意到即使将样板代码放在我们主要平台启动脚本的最顶部,仍然会抛出错误。在这种情况下,我们唯一能想到的更改是目录更改(因为引导脚本位于include_path. 将external目录添加到 php'sinclude_path后,它似乎工作了。然而,我对此感到困惑,因为我的理解是 Phar 文件是自包含的,特别是没有这样的问题。为什么已经成功包含 Phar 文件后,它会突然无法引用自己?

更新:因此,上述更新不是实际修复。结果很奇怪。它会旋转一次很好,然后在接下来的几次失败。同样,这是在它之前没有其他代码加载的时候。有趣的是:如果我们重新启动 Apache,它会在第一个页面加载时加载。之后的一切都失败了。

4

2 回答 2

0

符号链接是否guzzle.phar指向具有不同名称的文件?

否则,您可以.phar通过在通过类加载文件时设置不同的别名来破坏文件中的内部链接Phar

new Phar('guzzle.phar, 0, 'differentalias.phar');
于 2017-06-21T06:20:05.990 回答
0

不确定,但我认为你不能从另一个 PHAR 中引用一个 PHAR。

为什么不使用 Composer 的常规设置(安装所有的 deps),然后使用Box 项目创建一个 PHAR ?

于 2017-06-21T11:46:23.693 回答