私は問題があります。私は、アプリケーションを格納するために使用されるLinuxのWebサーバー(Apache 2のRHEL 4)を持っています。このアプリケーションの一部は、一連のPHPスクリプトです。私はいくつかのフォーム変数を受け入れて、ファイルをユーザーにダウンロードするスクリプトを作成しました。ここにコード:LinuxからWindowsへファイルをダウンロードする際にファイルの終わりを修正しました。
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$destFileName);
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($fullPath));
ob_clean();
flush();
readfile($fullPath);
これはすべて正常に動作し、ファイルがダウンロードされます。しかし問題がある。これらのファイルは、LinuxマシンからWindowsマシン(常に)にダウンロードされています。問題はエンコーディングです。 Linuxのボックスでファイルを見ると、すべてのテキストが整列され、すべての列が正常に表示されます。 (ファイルは単なるテキストファイルです)。しかし、ファイルがWindowsのボックスにダウンロードされ、メモ帳で開かれると、ファイルはすべて壊れてしまい、何も整列しません。また、奇妙な文字(ボックスのように見えますが、それは未知の文字の一般的な表現です)が見えます。このファイルを別のプログラムにインポートすると、動作しません。
ただし、ワードパッドでファイルを開くと、すべてのテキストが正しく表示されます。ワードパッドから保存すると正しく読み込まれ、Notpadで正しく表示されます。
私はファイルエンコーディングに関する知識があまりないため、ダウンロードするためにユーザーに送信する前にファイルをどのようにエンコードすることができるかについての情報は素晴らしいものです。
私はreadfile($fullPath);
を交換してみました:
$handle = @fopen($fullPath, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
$buffer = str_replace('\n', '\r\n', $buffer);
echo $buffer;
}
fclose($handle);
}
ありがとう!
念のために誰もが同様の問題でここに来る:改行は、それがないの問題だ、メモ帳/エディタでのボックスに変わりはなく、ワードパッドで罰金見ればWindowsの改行を使用している(何らかの理由でメモ帳は改行についてかなり肛門であるが、ワードパッドはそれを正しく取得する)。見た目が他の文字の場合は、おそらくエンコードの問題(Windows-1252またはUS-ASCIIとして扱われるUTF-8など)を処理している可能性があります。 –