しばらく取り組んできたプロジェクトで深刻な問題にぶつかりました。
ユーザーがファイルをコースにアップロードします。アップロードスクリプトはファイル名を取得し、スペースをアンダースコアに置き換え、ファイル拡張子を削除し、4桁の数字を追加してから、拡張子を追加し直します。
ただし、ファイルはサーバーに完全にアップロードされます(「uploads」フォルダーから直接開いた場合は問題ありません)。ユーザーのコンピューターにダウンロードすると、DOCXファイルとイメージを除くすべてのファイルが破損します。
PDF、Excel(xlsx)、およびPowerPoint(pptx)は、ダウンロードしたファイルを開くと、「ファイルが破損しているため、開くことができません」というエラーメッセージを表示します。
ダウンロードする必要のあるコードは次のとおりです。
<?php
class download extends Controller {
public function resource ($filename)
{
$filepath = realpath('./uploads/resources/courses/' . $filename);
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Pragma: no-cache');
readfile($filepath);
}
}
これはMVCであるため、クラス内にあり、$filenameはファイル名の$_GET変数から取得されます。
どんな助けでも大歓迎です!