私はこれを持っていますpageは、曲のダウンロードであるはずです。ダウンロードは私のためのFirefoxで動作しますが、ChromeとSafariの何で私はこの仕事を得るために異なるもののすべての種類を試してみましたが、何も2つのブラウザで起こっていないPHPでファイル転送コードが正しいですか?
public function download() {
if (isset($this->request->get['order_download_id'])) {
$order_download_id = $this->request->get['order_download_id'];
} else {
$order_download_id = 0;
}
$download_info = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_download od LEFT JOIN `" . DB_PREFIX . "order` o ON (od.order_id = o.order_id) WHERE o.customer_id = '" . (int)$this->customer->getId(). "' AND o.order_status_id > '0' AND o.order_status_id = '" . (int)$this->config->get('config_download_status') . "' AND od.order_download_id = '" . (int)$order_download_id . "'");
if ($download_info->row) {
$file = DIR_DOWNLOAD . $download_info->row['filename'];
$mask = basename($download_info->row['mask']);
$mime = 'application/octet-stream';
$encoding = 'binary';
if (!headers_sent()) {
if (file_exists($file)) {
header('Pragma: public');
header('Expires: 0');
header('Content-Description: File Transfer');
header('Content-Type: ' . $mime);
header('Content-Transfer-Encoding: ' . $encoding);
header('Content-Disposition: attachment; filename="' . ($mask ? $mask : basename($file)) . '"');
header('Content-Length: ' . filesize($file));
$file = readfile($file, 'rb');
print($file);
} else {
exit('Error: Could not find file ' . $file . '!');
}
} else {
exit('Error: Headers already sent out!');
}
}
}
私のコードですhappens..here ..あなたのアイデアや助けを歓迎するでしょう。
私はreadfileの戻り値を出力したくないと思います。既にコンテンツの長さを送っていて、予期せぬことです(さらに、受信者側のファイルが壊れてしまう)。 –
リダイレクトを削除した場合、ファイルを取得しますか?私はIEについて十分に分かっていませんが、ヘッダーを読んで、応答本体を処理する前にリダイレクトストリームに従っているだけかもしれません。 – Candide
これまでのところファイルがありません。 – Trace