У меня есть htaccess защищенная паролем папка с несколькими файлами в ней. Пользователям запрещается доступ ко всем файлам, но им разрешено загружать их самостоятельно.Скопируйте и загрузите файл в 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?
Если есть другой, лучший способ, я открыт для этого.
UPDATE
Вышеуказанные работы, но не со всеми файлами. Старые PDF-файлы (Acrobat 6) не работают, но файлы Acrobat X делают. То же самое относится к файлам docx. Некоторые работают, другие - нет. Очень странно, так как я могу открыть все прямо на моем ПК. Я предполагаю, что это имеет какое-то отношение к строке приложения/pdf (или application/vnd.openxmlformats-officedocument.wordprocessingml.document для docx). Все остальные, как изображения, работают.
Я скопировал ваш код, и он отлично работает. Попробуйте добавить 'die()' после 'file_get_contents' – Narek
Спасибо, Нарек. Я попробовал die(), но это не сработало. Я просто тестировал его со старым PDF-файлом, и это работает. Может быть, что-то не так в заголовке файла? Возможно ли какой-то «общий» заголовок, который я могу использовать для разных PDF, DocX, Tiffs и т. Д.? Я имею в виду в этом заголовке строки ('Content-type: application/pdf'); – mat
@mat, я вижу вашу мысль, я удалю мои предыдущие комментарии, поскольку они кажутся неуместными. – Jacco