Иногда хочется при нажатии ссылки получить готовый файл с содержимым, для этого можно использовать 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; } }
Это далеко не единственный способ сохранения файлов, но как один из вариантов для решения задачи вполне подходит.