「簡単な」ダウンロードのために Codeigniter の Download ヘルパーを使用しています。
$this->load->helper('download');
$file = //get_file_name_from_db
$data = file_get_contents( upload_path . $file);
force_download($file, $data);
私が抱えている問題は、.7z と .rar が正しくダウンロードされていないのに、.zip が正しくダウンロードされていることです。ただし、アップロードされたファイルをチェックして、ファイルが破損しているかどうかを確認すると、(FTP 経由またはローカルでフォルダーをチェックするだけで) 問題ありません。
ファイルが非常に小さい場合 (5kb 程度) に混乱を招くことに加えて、どのタイプ (7z および rar) も破損しません。
参考までに、mime.php で使用する MIME タイプを示します (アップロード ヘルパーとダウンロード ヘルパーの両方が使用します)。
'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
'7z' => array('application/x-7z-compressed','application/x-7z', 'application/7z', 'application/force-download', 'application/octet-stream'),
'rar' => array('application/x-rar-compressed','application/x-rar', 'application/rar', 'application/octet-stream')
問題は、MIME タイプのいずれかの 2 つのポイントにある可能性があります (前述のように、非常に小さなファイル サイズで機能するため、おそらくそうではありません)。または file_get_contents() と header("Content-Length: ".strlen($data)); サイズに関係なく、.zip は常に正しくダウンロードされるため、そうではない可能性があります。
それとも、サーバーの設定の問題でしょうか? ホストとローカルホストの両方でテストしましたが、同じように動作します。
それで、誰かが問題が何であるかを知っていますか、それとも私が使用すべき代替のダウンロードスクリプトまたは方法を提案できますか?
更新: 1.8 MB のサイズの 7z ファイルをホストにアップロードしましたが、ダウンロードしたときにファイルが破損していませんでした...何が問題なのかを理解するのにますます苦労しています。
アップデート:
答えが見つかったのは、ファイルフォームの上にある値であり、少し前に値を確認するために値をエコーしたいくつかの接続されたメソッドでした。
詳細はこちら: ダウンロードしたファイルが破損する原因は何ですか?