まずは以下のサンプルをご覧ください。サーバーはWindowsで、内部・外部の文字エンコーディングはUTF-8です。UTF-8のファイル名を外部から受け取り、Windowsなのでファイル名をShift_JISに変換してファイルを読み込んでいます。basename関数を通すことにより、ディレクトリトラバーサル対策を施しています。 <?php header('Content-Type: text/plain; charset=UTF-8'); $file_utf8 = basename($_GET['file']); $file_sjis = mb_convert_encoding($file_utf8, 'cp932', 'UTF-8'); $path = './data/' . $file_sjis; var_dump($path); readfile($path); しかし、ディレクトリト
![PHPのbasename関数でマルチバイトのファイル名を用いる場合の注意](https://cdn-ak-scissors.b.st-hatena.com/image/square/56477481b68b1fb1e7549dff04ba79865deb4923/height=288;version=1;width=512/https%3A%2F%2F2.bp.blogspot.com%2F-OeDYgXCFAfw%2FVNsqIJAj2fI%2FAAAAAAAALxs%2FsiuV-kYtIuc%2Fw1200-h630-p-k-no-nu%2Fbasename003.png)