2011-09-22 61 views
3

使用vfsStream,我能够要求或包含一个虚拟文件吗?包含或需要一个vfsStream文件

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

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

上面的代码在PHPUnit下无提示失败。

谢谢。

+0

https://bugs.php.net/bug.php?id=50898 –

+1

我遇到同样的问题。 PHP文档说include/require接受流,所以看起来这应该起作用。我已经提交了一个[vfsStream错误报告](https://github.com/mikey179/vfsStream/issues/22) – Michael

回答

1

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

1

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

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

感谢vfcStream维护人员Frank Kleine帮助我跟踪此问题。 1

+0

这是一个绝对的救星。在OS和PHP版本升级之后,带有http:// URL的require_once只是失败了。没有日志,没有错误信息,什么都没有。我正在绞尽脑汁,试图弄清楚发生了什么。在suhosin.ini et瞧!启用适当的模式!现在我们回来了,我看起来像个天才。 –

相关问题