header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-type: application/force-download"); header("Content-Disposition: attachment; filename=\"". $file ."\";"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($file)); file_get_contents($file); readfile($file); exit();
Любая идея, что я делаю неправильно? Не следует ли загрузить любой файл с моего сервера на жесткий диск пользователя? Как-то каждый файл поврежден! Кроме того, мне интересно, как я могу изменить имя файла загруженного файла?
$file
всегда содержит полный путь к моему файлу. если я попробую header('Location:' . $file );
браузер успешно открывает мой файл. однако, если файл является .jpg, браузер не запрашивает окно загрузки. вместо этого он просто открывает файл в окне браузера. Я хочу, чтобы каждый файл загружался в hd.
Пожалуйста, помогите мне, ребята. Я после этого уже более недели, и я не могу найти решение?
Почему бы не использовать
header("Content-type: application/octet-stream");
Вместо «force-download»
Также почему вы делаете file_get_contents
и readfile
? Требуется только один – вы в основном включаете файл дважды, поэтому он поврежден. Вот как я мог бы выполнить приведенный выше код:
header("Cache-Control: no-cache"); header("Expires: -1"); header("Content-Type: application/octet-stream;"); header("Content-Disposition: attachment; filename=\"" . basename($file) . "\";"); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($file)); echo file_get_contents($file);
Этого должно быть достаточно – пока файл действительно существует