我在 ZendStudio 中遇到一个非常奇怪的问题。在 ZendStudio 中使用 phar 扩展 phar:// 流包装器在 phar 归档中包含或要求文件将不起作用。
这是我所做的。
给定以下文件结构:
phar/Test.php
pharbuilder.php
usephar.php
具有以下内容:
法尔/Test.php:
class Test {}
phabuilder.php:
$phar = new Phar(__DIR__ . '/test.phar');
$phar->buildFromDirectory(__DIR__ . '/phar/');
使用phar.php:
var_dump(file_exists('phar://' . __DIR__ . '/test.phar/Test.php'));
include('phar://' . __DIR__ . '/test.phar/Test.php');
$test = new Test();
var_dump($test);
现在,如果您首先在 ZendStudio 中运行 pharbuilder.php(ZS 8:右键单击文件,以 PHP 脚本运行),phar 文件(test.phar)将被成功创建(在运行之前,您必须添加 ini 选项phar.readonly=0
到相应的 php.ini)。但是,在 ZS 中运行 usephar.php 会导致错误。
bool(true)
Warning: include(): Failed opening 'phar:///somepath/test.phar/Test.php' for inclusion
所以很明显,可以找到该文件,但无法包含它。我还可以使用访问文件中 Test.php 的内容file_get_contents('phar://' . __DIR__ . '/test.phar/Test.php')
另外,我注意到如果我修改此脚本的运行配置并禁用“运行时显示调试信息”复选框,这不会发生。所以我认为它与 ZendDebugger 有关,但我不太确定。
当我从控制台运行相同的脚本时,一切正常。
我在 ZendStudio 8 和 10 以及 ZS 中提供的所有 php 版本(5.4.11、5.3.21、5.3.3 都在 CGI 和 CLI 中)进行了尝试。
由于我找不到其他人有同样的问题,我认为我做错了什么并且愿意接受任何建议。也许是一些秘密的 php.ini 指令或类似的东西。