PHPUnit - 使用realpath()的测试函数

时间:2013-06-07 01:31:56

标签: php filesystems phpunit

我有一个函数检查用户提供的文件名是否在/ opt /目录下。 它使用realpath,因此出于安全原因,用户无法传递类似“../etc/passwd”的内容。

function check_file_path($relative_filename) {
    $abspath = realpath('/opt/' . $relative_filename);
    return ($abspath && strpos($abspath , '/opt/') === 0);
}

如果文件在fs上不存在,则realpath将返回false。 当PHPUnit运行时(在开发机器上,而不是在服务器上),路径不存在,因此我们无法进行正面测试。

我已经研究过vfsstream,但它与realpath()

的搭配并不好
org\bovigo\vfs\vfsStream::setup('home');
$file = org\bovigo\vfs\vfsStream::url('home/test.txt');
file_put_contents($file, "The new contents of the file");
$abspath = realpath('vfs://home/test.txt');
// $abspath will be false

是否建议模拟文件系统以使realpath起作用?

1 个答案:

答案 0 :(得分:1)

  1. 您可以使用runkit。它是php的扩展。

  2. 但如果您的函数在任何命名空间内调用,您可以在该命名空间中定义自己的函数。