【发布时间】:2017-11-23 12:36:53
【问题描述】:
这有点奇怪,所以请多多包涵。
我正在尝试在我们的自定义平台上启动并运行 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 的include_path 后,它似乎工作了。然而,我对此感到困惑,因为我的理解是 Phar 文件是自包含的,特别是没有这样的问题。 为什么已经成功包含 Phar 文件后,会突然无法引用自己?
更新:因此,上述更新并不是真正的修复。结果很奇怪。它会旋转一次很好,然后在接下来的几次失败。同样,这是在它之前没有其他代码加载的时候。 一些有趣的事情:如果我们重新启动 Apache,它会在第一个页面加载时加载。之后的一切都失败了。
【问题讨论】:
-
如果你重新启动 Apache 就可以了。听起来很熟悉;你有没有安装过某种 PHP op-cache?