Защита загрузок

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

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

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

Тестовый код:

<?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>

2 ответа

Решение

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

<?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>";
}

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

Другие вопросы по тегам