Рецепт №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);