ユーザーが指定したファイル名が /opt/ ディレクトリの下にあるかどうかをチェックする機能があります。セキュリティ上の理由から、ユーザーが「../etc/passwd」などを渡すことができないように、realpath を使用します。
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 が機能するようにファイルシステムをモックする提案はありますか?