03.07.2019

Принудительная загрузка файла

Иногда надо отдать пользователю сайта какой то файл, при чем без возможности повторного скачивания. Это могу быть какие то прайсы или документы. Для этого можно воспользоваться маленькой шпаргалкой

function fileForceDownload($file)
{
    if (file_exists($file)) {
        // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
        // если этого не сделать файл будет читаться в память полностью!
        if (ob_get_level()) {
            ob_end_clean();
        }
        // заставляем браузер показать окно сохранения файла
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        // читаем файл и отправляем его пользователю
        readfile($file);
        unlink($file);
        exit;
    }
}

Для использования достаточно передать имя файла в функцию.