У меня есть часть кода, которая позволяет пользователям загружать файл с сервера (документ, такой как docs, docx, pdf и т. Д.).PHP - Каковы правильные заголовки для загрузки файла?
Пользователи могут скачивать файлы, но у нее есть ошибки, такие как файлы были повреждены. Например, файл MS Word после загрузки требует восстановления для чтения содержимого.
Интересно, что если в этом коде есть какая-либо ошибка (или проблема при загрузке?).
$size_of_file = filesize($download_path);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $file_name);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size_of_file);
//read file from physical path
readfile($download_path);
Вы можете попробовать создать тип содержимого в зависимости от типа файла, вместо того, чтобы всегда использовать «октет-поток». Другой комментарий: попробуйте удалить заголовок «передача файла». Я сделал то, что вы хотите в нескольких проектах, и я никогда не пользовался таким заголовком. – jap1968
ли ваш метод readfile() печатает содержимое ваших файлов? вы должны написать их с помощью команды echo(). – belgther
@belgther - readfile() всегда печатает содержимое файла в стандартный вывод. Вернемся к вопросу, maby вы печатаете что-то (пробел, новую строку и т. Д.) Перед чтением файла, и он разбивает загруженный файл? Это возможно, потому что файл после восстановления. – piotrekkr