У меня есть функция, которая проверяет, находится ли пользовательское имя файла в каталоге/opt /. Он использует realpath, поэтому пользователи не могут передать что-то вроде «../etc/passwd» из соображений безопасности.PHPUnit - функция тестирования, которая использует realpath()
function check_file_path($relative_filename) {
$abspath = realpath('/opt/' . $relative_filename);
return ($abspath && strpos($abspath , '/opt/') === 0);
}
Теперь realpath вернет false, если файл не существует на fs. Когда PHPUnit запущен (на машине dev, а не на сервере), путь не существует, поэтому мы не можем сделать положительный тест.
Я посмотрел в 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 будет работать?
https://github.com/php-test-helpers/php-test-helpers для нестандартного расширения, которое использует runkit. Имеет пример переименования функции – qrazi