Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как отдать файл на скачивание

Короткий ответ

Отправьте заголовки и выведите файл функцией 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');
}

Функции из этого ответа

  • readfile — Выводит содержимое файла.
  • header — Отправляет заголовок HTTP-ответа.
  • filesize — Возвращает размер файла в байтах.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.