Как отдать файл на скачивание
Короткий ответ
Отправьте заголовки и выведите файл функцией readfile():
<?php
// download.php
$file = __DIR__ . '/files/report.pdf';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="report.pdf"');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;Имя файла из запроса
Нельзя подставлять имя из адреса прямо в путь: запрос ?file=../config.php выдаст чужой файл. basename() отбрасывает путь, оставляя только имя:
<?php
// download.php
$name = basename($_GET['file'] ?? '');
$file = __DIR__ . '/files/' . $name;
if ($name === '' || !is_file($file)) {
http_response_code(404);
exit('File not found');
}