Сохранение файла на компьютер пользователя

Рецепт №71. Из книги «128 рецептов php»
Перейти к оглавлению

Еще одним немало важным моментом в работе с файлами является реализация предложения пользователю сохранить файл на компьютер. То есть при переходе по ссылке, для пользователя в браузере должно появиться окно с предложением сохранить файл. Этого не сложно добиться, задав определенные заголовки для браузера. Единственная сложность, возникающая в процессе реализации – это задать заголовки кроссбраузерно. Для всех адекватных браузеров заголовки задаются одни и те же, а вот для Internet Explorer уже совсем другие.

В рецепте приведен пример сохранения картинки в формате png, для файлов в другом формате следует заменить соответствующие заголовки.
Пример:

// имя файла, с которым он будет сохранен
$file_name = "pic.png"; 
// путь до файла
$file_path = "/images/pic.png";

// код 200, все хорошо
header("HTTP/1.1 200 OK"); 
header("Content-type: image/png"); // тип файла
// дата по Гринвичу
header('Expires: ' . gmdate('D, d M Y H:i:s') . 
' GMT'); 
// определяем браузер
$ua = (isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
$isMSIE = preg_match('@MSIE ([0-9].[0-9]{1,2})@', $ua);
if ($isMSIE){
	// если это Internet Explorer  
	// объясняем браузеру, что выводим файл
	header('
		Content-Disposition: attachment; filename="' . $file_name . '"'
	); 
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	header('Pragma: public');
}else{
	// если это НЕ Internet Explorer 
	// объясняем браузеру, что выводим файл
	header('Content-Disposition: attachment;filename="' . $file_name . '"');
	header('Pragma: no-cache');
}
// вывод файла в браузере
readfile($file_path);
Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*