包含或要求vfsStream文件

时间:2011-09-22 19:58:08

标签: php unit-testing tdd phpunit vfs

使用vfsStream,我可以要求或包含虚拟文件吗?

$structure = array(
    'classes' => array('Foo.php' => '<?php class Foo {} ?>')
);
\vfsStream::create($structure);

require_once(\vfsStream::url('classes').DIRECTORY_SEPARATOR.'Foo.php');

上面的代码在PHPUnit下无声地失败。

感谢。

2 个答案:

答案 0 :(得分:1)

你试过吗? require_once(\vfsStream::url('root/classes').DIRECTORY_SEPARATOR.'Foo.php'); ?对vfsStream::create($structure);的调用创建了根目录,并且不使用$structures中的第一个条目作为根目录,因为此数组中可能有多个元素。另见https://github.com/mikey179/vfsStream/wiki/Createcomplexstructures上的文档。

答案 1 :(得分:1)

除了Frank关于错误使用url()的回答之外,可能还存在配置问题。在库存PHP安装中,您必须确保在php.ini中启用allow_url_fopen并在配置或脚本中启用allow_url_include。

但是,在我的情况下,我正在运行Suhosin extension,它会忽略这些参数并默认情况下完全禁用url_fopen。为了包含/要求vfsStream文件,您需要将vfs://方案添加到php.ini中的Suhosin白名单:suhosin.executor.include.whitelist = "vfs://"

感谢vfsStream维护者Frank Kleine,帮助我跟踪它。1