使用phar流的require文件在ZendStudio中不起作用


require file using phar stream does not work within ZendStudio

我在ZendStudio中遇到了一个非常奇怪的问题。在ZendStudio中,使用phar扩展phar://流包装器在phar档案中包含或要求文件将不起作用。

以下是我所做的。

给定以下文件结构:

phar/Test.php
pharbuilder.php
usephar.php

具有以下内容:

phar/Test.php:

class Test {}

pharbuilder.php:

$phar = new Phar(__DIR__ . '/test.phar');
$phar->buildFromDirectory(__DIR__ . '/phar/');

usephar.hp:

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.par)将成功创建(在运行它之前,您必须将ini选项phar.readonly=0添加到相应的php.ini中)。但是,在ZS中运行usephar.php会导致错误。

bool(true)
Warning: include(): Failed opening 'phar:///somepath/test.phar/Test.php' for inclusion

很明显,这个文件是可以找到的,但不能包括在内。我还可以使用file_get_contents('phar://' . __DIR__ . '/test.phar/Test.php') 访问文件中Test.php的内容

此外,我注意到,如果我修改此脚本的运行配置并禁用复选框"运行时显示调试信息",则不会发生这种情况。所以我认为这与ZendDebugger有关,但我不太确定。

当我从控制台运行相同的脚本时,一切都很好。

我在ZendStudio 8和10以及ZS提供的php版本(5.4.11、5.3.21、5.3.3都在CGI和CLI中)中尝试了这一点。

由于我找不到其他有同样问题的人,我认为我做错了什么,愿意接受任何建议。也许是一些秘密的php.ini指令或类似的东西。

此问题现已在Zend Studio 10.6.2中修复。请注意,如上所述,您需要修改php.ini文件(位于-<studio_home>/plugins/com.zend.php.debug.debugger.win32.x86_'resources'php中)并添加phar.readonly=0