2011-03-24 2 views
0

Я просто тестировал этот сценарий загрузки ниже. Загрузка работает отлично, но загруженный архив zip или rar всегда поврежден и не может быть открыт. Я протестировал его на локальном сервере разработки, а также в моей учетной записи хостинга.Protecting Downloads

Я просто пытаюсь узнать, как это работает, но я этого не понимаю.

Вся помощь приветствуется!

Код проверки:

<?php 
$is_logged_in = 1; 
$path_to_file = 'downloads/tes.zip'; 
$file_name = 'test.zip'; 

if ($is_logged_in == 1) 
{ 
    header("X-Sendfile: $path_to_file"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=\"$file_name\""); 
    exit; 
} 
?> 

<h1>Permission denied</h1> 
<p>Please Login first!</p> 
+0

Открыть файл в текстовом редакторе. Что ты видишь? –

+0

Вы не отправляете никаких данных, не так ли? – Gumbo

+0

Вы установили 'mod_xsendfile' как рекомендуется с этим кодом? – icktoofay

ответ

1

В основном это вероятность того, что у вас есть что-то прилагаемое/предваряется файл. Попробуйте использовать buffering и чистку.

<?php 
ob_start(); 
$is_logged_in = 1; 
$path_to_file = 'downloads/tes.zip'; 
$file_name = 'test.zip'; 

if ($is_logged_in == 1) 
{ 
    $fp = fopen($path_to_file, 'rb'); 

    if(is_resource($fp)) 
    { 
      ob_clean(); 
      header("Content-Type: application/force-download"); 
      header("Content-Length: " . filesize($path_to_file)); 
      header("Cache-Control: max_age=0"); 
      header("Content-Disposition: attachment; filename=\"$file_name\""); 
      header("Pragma: public"); 
      fpassthru($fp); 
      die; 
    } 
} else { 
    echo "<h1>Permission denied</h1>"; 
    echo "<p>Please Login first!</p>"; 
} 
+0

Есть ли альтернатива использованию файла mod_xsend. Можно ли это сделать без установки модуля? – usnidorg

+0

спасибо, сохраните его с заголовками, как я писал, он решает некоторые проблемы с загрузкой IE. – Igor

0

Вы настроили свой веб-сервер (Apache, в частности), чтобы загрузить mod_xsendfile? Без этого модуля ваш скрипт практически ничего не делает.