У меня есть защищенная паролем папка htaccess с несколькими файлами в ней.Пользователям не разрешен доступ ко всем файлам, но им разрешено загружать свои собственные.
Поскольку я не могу напрямую связать файл и поскольку копирование / удаление не является реальным решением, я подумал, что простооткройте файл с помощью file_get_contents и верните его обратно на страницу, используя правильный заголовок.Но .. у меня это не работает .. Вот мой код.Ошибка, которую я получаю, заключается в том, что при открытии файла я получаю ошибку «файл поврежден» от Acrobat.
<?php
$file = "cms/docs/5641-1.pdf";
header('Content-Description: File Transfer');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename='.basename("exoticfilename.pdf"));
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: ' . filesize($file));
if (file_exists($file))
{
echo file_get_contents($file);
}
?>
Кроме того, в этом примере я просто использую файл PDF, но существует несколько типовфайлов.Поэтому я, вероятно, должен изменить заголовок в зависимости от типа файла.Есть ли решение для этого, или я должен просто использовать очень длинный оператор if / else?
Если есть другой, лучший способ, я открыт для этого.
ОБНОВЛЕНИЕ
Выше работает, но не со всеми файлами.Старые PDF-файлы (Acrobat 6) не работают, но файлы Acrobat X работают.То же самое относится к файлам docx.Некоторые работают, другие нет.Очень странно, так как я могу открыть все прямо на моем ПК.Я предполагаю, что это как-то связано со строкой application / pdf (или application / vnd.openxmlformats-officedocument.wordprocessingml.document 'для docx).Все остальные, как изображения, работают.