私は現在次のものを持っています:
if (headers_sent()) {
echo 'HTTP header already sent';
} else {
if (!is_file($path)) {
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
echo 'File not found';
} else if (!is_readable($path)) {
header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
echo 'File not readable';
} else {
ob_start();
header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
header('Content-Description: File Transfer');
header("Content-Type: octet-stream");
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header("Content-Length: ".filesize($path));
header("Content-Disposition: attachment; filename=\"".basename($path)."\"");
ob_clean();
ob_flush();
readfile($path);
exit;
上記のコードは、正しいファイル名のファイルダウンロードを生成しますが、ひねりが加えられています。
ダウンロードされたファイルには、ダウンロードページからのhtmlが含まれ(ヘッダーが正しく送信されていませんか?)、ダウンロードされたドキュメントの後半に、数ページを占めるぎこちないテキスト(OJQJ ^ J。??。WW8Num2z0など)があります。最後に、.docの最後で、.docの正しいテキストのように見える英語を読むことができますが、フォーマットはありません。
これらの問題はChromeとMozillaで持続します。
どんな助けでも大歓迎です。前もって感謝します。
編集:
「test」という1行のテキストしかない.docでテストを開始しました。
ファイルは、アップロード先のディレクトリから手動で開き、破損していないことを確認できます。ただし、これまでに推奨されている方法のいずれかを使用してこのファイルをダウンロードすると、数ページのぎこちないテキストが生成されます(実際のファイルは1行のみです)。ファイルの実際のテキストである「test」は、66ページのジブリッシュの最後にあり、次の干し草の山にあります。?test? "ᄚ?ᄚ?!ᄚn" ᄚn#ミn $ ミ n3P(20???՜。 ?1Table ???????????? ᆬSummaryInformation(????? WordDocument ???????????? "$ DocumentSummaryInformation8 ???????????? [t ???????????????????