2

しばらく取り組んできたプロジェクトで深刻な問題にぶつかりました。

ユーザーがファイルをコースにアップロードします。アップロードスクリプトはファイル名を取得し、スペースをアンダースコアに置き換え、ファイル拡張子を削除し、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変数から取得されます。

どんな助けでも大歓迎です!

4

2 に答える 2

0

ダウンロードしたファイルのファイル名にスペースやその他の特殊文字が含まれていませんか? このような問題は、ファイル名にスペースやその他の特殊文字が含まれている場合に発生するためです。

于 2012-12-23T16:13:36.267 に答える