Скопируйте и загрузите файл в защищенную папку htaccess - PullRequest
1 голос
/ 31 января 2012

У меня есть защищенная паролем папка 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).Все остальные, как изображения, работают.

1 Ответ

0 голосов
/ 31 января 2012

Поскольку вы используете htaccess / htpasswd для защиты каталога от пиявок с горячей связью.Вы случайно блокируете доступ к файлам из внешнего источника, такого как браузер, на стороне клиента.Поскольку каталог требует аутентификации для доступа к файлам внутри него, вам необходимо создать сценарий вокруг него.В некотором смысле аутентификация через скрипт.Я видел, как это было сделано ранее, и вы можете найти одну из многих ссылок на эту тему здесь http://koivi.com/php-http-auth/

, но суть в том, что htaccess и htpasswd запустят ваши скрипты, даже если они находятся на том же хост-компьютере, что и они.из-за отсутствия лучшего уровня сервера описания, он запускался до того, как даже php начал свой процесс при загрузке страницы.

...