Я сейчас пользуюсь этот Скрипт загрузки PHP в длинный список больших файлов (1 ГБ +) с моего сайта, но после жалоб на испорченные загрузки я исследовал и нашел более привлекательную альтернативу: mod_xsendfile. Мой хостинг с Dreamhost, и они уже включили xsendfile в моем домене. Я протестировал его, используя этот код с сайта авторов, и он работает:
<?php
header("X-Sendfile: /home/username/website.com/test.zip");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=test.zip");
exit;
?>
Но я хотел бы, чтобы все загрузки были в одном каталоге и ссылки на файлы, как я делаю со сценарием из медиа-подразделения:
https://website.com/download.php?file=test.zip
Я просмотрел большинство вопросов с тегом x-sendfile и не нашел ничего полезного. Я не могу написать код PHP, но знаю достаточно, чтобы настроить скрипты, чтобы они работали. Кто-нибудь знает сценарий, который может сделать это или может помочь мне?
Спасибо
Это можно сделать так:
<?php
$path = realpath("/home/username/website.com/" . $_GET["file"]);
if (strpos($path, "/home/username/website.com/") !== 0) {
header("Status: 404 Not Found");
die();
}
header("X-Sendfile: $path");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$_GET["file"]);
Это также гарантирует, что пользователь не сможет получить файл из любого другого каталога. /home/username/website.com/
например, резервная копия базы данных или что-то еще, что вы не хотите загружать.
Других решений пока нет …