我有一个函数检查用户提供的文件名是否在/ 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起作用?