0

Windows Server 2012 で PHP と IIS 8 を使用しています。サーバーで UTF-8 でエンコードされたファイルを作成し、次のコードを使用してクライアントにプッシュします。

                // Start upload to client
                $fullPath = $full_name;
                $fsize = filesize($fullPath);
                $path_parts = pathinfo($fullPath);
                $ext = strtolower($path_parts["extension"]);
                header("Content-type: application/octet-stream");
                header("Content-Disposition: attachment; filename=\"".$file_name."\"");
                header("Content-length: $fsize");
                header("Cache-control: private");
                readfile($full_name);

クライアントがファイルを受け取ると、開始 BOM が含まれており、(驚いたことに) ファイルの最後に 3 文字がありません。サーバー上のファイルを確認したところ、そこに正しく保存されています (BOM が保存されておらず、欠落している 3 文字がそこにあります)。

ファイルを作成してアップロードする PHP スクリプトには、ヘッダーがあります。

header('Content-Type:text/html; charset=UTF-8');

不足している 3 つの文字を取得するために、ファイルの最後に 3 回の「改行」を追加することにしました。変数 $fsize に +3 を追加することもできますが、そのようなチートを行うのは気が進まない (反撃する可能性があります)。これからもっとエレガントな方法があるはずだと思います。

不思議なことに、IIS 7.5 を搭載した Win7 マシンで同じコードを使用していますが、UTF-8 BOM の追加に問題はありません。PHP ディレクトリは、php.ini ファイルを含む Win7 マシン上のディレクトリのコピーです。

誰かが私が欠けているものを見ることができますか?

よろしくお願いします。

4

1 に答える 1