使用vfsStream,我可以要求或包含虚拟文件吗?
$structure = array(
'classes' => array('Foo.php' => '<?php class Foo {} ?>')
);
\vfsStream::create($structure);
require_once(\vfsStream::url('classes').DIRECTORY_SEPARATOR.'Foo.php');
上面的代码在PHPUnit下无声地失败。
感谢。
答案 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