Допустим на своём сайте вы распространяете документы MS Office, текстовые файлы, и другие файлы.
Если на web странице выложить ссылку на один из таких файлов, при нажатии файл откроется в окне браузера, но не будет закачиваться.
А вот как сделать, так что бы при нажатии на ссылку файл скачивался, читайте дальше.
Допустим все файлы хранятся в простой таблице. А именно.
Имя файла.
Дата создания.
Размер.
Mime тип.
CREATE TABLE files (id int(30) auto_increment, file_name text(255), date datetime DEFAULT '0000-00-00 00:00:00', size int(30) NOT NULL, mime_tip text(80) NOT NULL, PRIMARY KEY (id));
При нажатии на ссылку сохранить, через id выбираем нужный файл из нашей БД. После чего посылаем браузеру клиента заголовки, в которых говорится, передаваемый файл необходимо сохранить.
Вот как это нужно сделать.
И так получаем через id. Делаем выборку из БД.
$query=mysql_query("SELECT * FROM files WHERE id='{$_GET['id']}'") or die (mysql_error()); //Производим выборку $result=mysql_num_rows($query); // Получаем количество записей. Если empty($result) = 0. показываем ошибку. echo"Такой файл не найден.";
Если всё ок, делаем выборку.
$rows=mysql_fetch_array($query);
Формируем нашу ссылку:
$fpath="Полный URL путь к файлу/$rows['file_name']}";
Получаем имя файла их $fpath.
$file = basename($fpath);
Отправляем заголовки клиенту.
header("Cache-Control: "); header("Pragma: "); header('Expires: 0'); header("Content-type: ".$rows['mime_tip']); // сообщаем mime тип Header("Accept-Ranges: bytes"); //Указываем что размер файла будет в байтах Header("Content-Length: ".$rows['size']); //Передаём размер header("Content-Disposition: attachment; filename=".$file); //указываем имя вложения $fdl = fopen($fpath, "r"); //Открываем файл fpassthru($fdl); fclose($fdl); header ("Connection: close");
Вот благодаря такой не хитрой операции, вы можете отдавать на закачку файлы с любыми расширениями, просто сообщая о том что файл нужно сохранить, а не открыть в браузере.
Постоянные ссылки
При копировании ссылка на TeaM RSN обязательна!
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.