Таким образом, у меня есть страница загрузки, где вы нажимаете ссылку, она открывает / downloads / download / randomhash
randomhash находится в db, i увеличивает счетчик загрузки, а затем перенаправляется на фактический файл, например /uploads/2012/file.png.
Все работает, за исключением того, что перенаправление делает то, что я хотел бы сделать. Я не уверен, почему он не работает …
header("Location: " . $row->uri); header("Content-Disposition: attachment; filename=$row->name");
При первом загрузке файла у него есть соответствующий заголовок для размещения контента (в firebug), но он не запрашивает загрузку файла (что ему нужно, правильно?). Есть идеи?
Заголовки ответов:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public Connection: Keep-Alive Content-Disposition: attachment; filename=promotion_photo_2.jpg Content-Encoding: gzip Content-Length: 20 Content-Type: text/html; charset=utf-8 Date: Mon, 27 Feb 2012 01:01:22 GMT Expires: Thu, 19 Nov 1981 08:52:00 GMT Keep-Alive: timeout=5, max=100 Location: /uploads/2012/mediakitD3CF.jpg Pragma: no-cache Server: * Vary: Accept-Encoding X-Powered-By: * X-UA-Compatible: IE=Edge,chrome=1
Вы устанавливаете заголовок Content-Disposition в том же ответе, который сообщает браузеру, где нужно перенаправить. Мое предложение состоит в том, чтобы просто передать вложение на ответ, без перенаправления
header('Content-Disposition: attachment; filename=file-to-be-downloaded.jpg'); header('Content-type: image/jpeg'); // or what is relevant, ie application/octet-stream $fn=fopen("path-to-file/file-to-be-downloaded.jpg","r"); fpassthru($fn);