6

私は、教師がドキュメントをアップロードし、生徒がそれらをダウンロードできるサイトに取り組んでいます。ただし、問題があります。Microsoft Word(.docx)ファイルは完全にダウンロードされますが、Excel(xlsx)ファイルをダウンロードすると、Excelは「このファイルは破損しているため開くことができません」というダイアログを表示します。これに関する助けをいただければ幸いです。

私のダウンロードコードは次のとおりです。

case 'xlsx':

    header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Pragma: no-cache');
    readfile('./uploads/resources/courses/' . $filename);

break;
4

6 に答える 6

2

これは、拡張機能に関係なく、ローカルの xampp セットアップで正常に機能するため、何か不足していない限り、私の観点からは case ステートメントは必要ありません

私はdocx、accdb、xlsx、mp3などでテストしました...

$filename = "equiv1.xlsx";

header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Pragma: no-cache');
于 2012-12-18T19:01:20.907 に答える
0

これを試して:

header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
于 2012-12-18T17:28:51.247 に答える
0

追加のヘッダーを追加してみてください

header('Content-Length: ' . filesize('./uploads/resources/courses/' . $filename));
于 2015-01-25T07:39:41.983 に答える
0

おそらく、これはWindows によって提供された非常に誤解を招く情報であり、コード、Excel ライブラリ、またはサーバーとは何の関係もなく、ファイル自体は適切なものです。Windows は、インターネットからダウンロードした一部のファイル (.xlsx など) を開くことをブロックし、安全でないファイルを開くかどうかを尋ねる代わりに、ファイルが破損していると表示するだけです。Windows 10 では、ファイルを右クリックして [ブロックの解除] を選択する必要があります(たとえば、こちらで詳細を読むことができます: https://winaero.com/blog/how-to-unblock-files-downloaded-from-internet- in-windows-10/ )

于 2020-07-22T15:39:22.520 に答える