Выгрузка файлов с PHP

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

Основные методы описаны в Источник

но применяя далее эту технологию, мне было необходимо загружать не просто файл с сервера, а файл с другого сервера. Для этого можно чуть поменять код, добавив в него копирование удаленного файла к себе во временную директорию. Имя файла можно брать с помощью функции pathinfo($url) , которая в свою очередь возвращает массив данных о файле, нам нужен ‘basename’ , либо воспользоваться функцией basename($url);. Надо сказать что ни pathinfo, ни basename не проверяют на существование файла, они лишь работают со строкой.
После отработки скрипта и сохранения файла на диске, файл можно удалить с помощью например unlink($file);

function file_force_download($url) {
    $file = __DIR__.'/temp/'.basename($url);
    if (file_exists($file)) {
        // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
        // если этого не сделать файл будет читаться в память полностью!
        if (ob_get_level()) {
            ob_end_clean();
        }
        // заставляем браузер показать окно сохранения файла
        header('Content-Description: File Transfer');
        header('Content-Type: image/jpeg');
        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));
//        var_dump(filesize($file));exit();
        // читаем файл и отправляем его пользователю
        if ($fd = fopen($file, 'rb')) {
            while (!feof($fd)) {
                print fread($fd, 1024);
            }
            fclose($fd);
        }
        unlink($file);
        exit;
    }
}

Это далеко не единственный способ сохранения файлов, но как один из вариантов для решения задачи вполне подходит.

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.