Защита загрузок
Я только что тестировал этот скрипт загрузки ниже. Загрузка работает нормально, но загруженный 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? Без этого модуля ваш скрипт по сути ничего не делает.