0

サーバーのすべてのディレクトリ内でファイルを検索し、ファイルへのフルパスを返すスクリプトがあります。検索クエリは base64 でエンコードされています。

スクリプトは、アクセントのないファイルを検索するときに完全に機能します。しかし、アクセントのあるものを検索するとすぐに機能しません。

これが私のファイル構造です:

/var/www/clients/client2/web1/web/dl/pp/6250/やばい!- 2002 - ルチャ Y フィエスタ.zip

/var/www/clients/client2/web1/web/dl/pp/6250/La Souris Déglinguée - 1988 - Quartier Libre.zip

最初のファイルを検索する(WWEgQmFzdGEhIC0gMjAwMiAtIEx1Y2hhIFkgRmllc3RhLnppcA==)と、正しいパスが返されます。

しかし、アクセントのある 2 番目のファイルを検索すると(TGEgU291cmlzIETpZ2xpbmd16WUgLSAxOTg4IC0gUXVhcnRpZXIgTGlicmUuemlw)、ファイルが存在していても結果は返されません。

スクリプトは次のとおりです。

header("Content-type: text/html; charset=utf-8");

// $encodedquery = "WWEgQmFzdGEhIC0gMjAwMiAtIEx1Y2hhIFkgRmllc3RhLnppcA==";  // query without accent = WORKS !
$encodedquery = "TGEgU291cmlzIETpZ2xpbmd16WUgLSAxOTg4IC0gUXVhcnRpZXIgTGlicmUuemlw" // query with accents = DOESNT WORKS

$decode = utf8_encode(base64_decode($encodedquery);
$search = preg_quote($decode);
echo "searching for \"$search\" ....";

        function rsearch($folder, $pattern) {
            $dir = new RecursiveDirectoryIterator($folder);
            $ite = new RecursiveIteratorIterator($dir);
            $files = new RegexIterator($ite, $pattern, RegexIterator::GET_MATCH);
            $fileList = array();
            foreach($files as $file) {
                $fileList = array_merge($fileList, $file);
            }
            return $fileList;
        }

        $root = $_SERVER['DOCUMENT_ROOT'];
        $resultatss = rsearch($root, '/.*\/'.$search.'/');

foreach ($resultatss as $resultat) {
echo "<br>FOUND FILE = $resultat";
}
4

0 に答える 0