1

ユーザーが指定したファイル名が /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 が機能するようにファイルシステムをモックする提案はありますか?

4

1 に答える 1

1
  1. runkitを使用できます。phpの拡張です。

  2. ただし、名前空間内で関数を呼び出す場合は、その名前空間で独自の関数を定義できます。

于 2013-06-07T01:39:56.733 に答える