php: принудительная загрузка на hd? - PullRequest
2 голосов
/ 23 июля 2010
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.

Пожалуйста, помогите мне, ребята.Я после этого больше недели и не могу найти решение?

1 Ответ

4 голосов
/ 23 июля 2010

Почему бы не использовать

header("Content-type: application/octet-stream");

Вместо «принудительной загрузки»

Также, почему вы делаете 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);

Этого должно быть достаточно - пока файл действительно существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...