这有点奇怪,所以请多多包涵。
我正在尝试在我们的自定义平台上启动并运行 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,它会在第一个页面加载时加载。之后的一切都失败了。