Приднестровская поддержка XOOPS
Перенаправление клиента на другой URL-адрес.
Запрет кэширования страниц.
Реализация ссылки Скачать. Просмотр заголовков, отправляемых сервером
Функция header() позволяет добавить заголовок. Имеет следующий формат: header(<Заголовок>);
Например, чтобы перенаправить клиента на URL http://www.rambler.ru/, нужно написать следующий код:
header("Location: http://www.rambler.ru/");
exit();
Чтобы запретить кэширование документа, нужно послать сразу несколько заголовков:
header("Expires: Sun, 27 May 2007 01:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
Очень часто на сайтах можно видеть две ссылки: Открыть и Скачать. Например, у нас есть файл в формате Word с именем filename.doc. Реализовать первую ссылку достаточно просто:
<a href="filename.doc">Открыть</a>
При переходе по ссылке файл будет открыт соответствующей программой без запроса сохранения файла. Во всяком случае так поступит Microsoft Internet Explorer.
Реализовать вторую ссылку позволяет установка соответствующих заголовков. Для этого нам понадобится промежуточный файл, например, save.php. В документе размещаем следующую ссылку:
<a href="save.php">Скачать</a>
А в файле save.php пишем код, приведенный в листинге 39.
<?php
$path = 'filename.doc';
if (!file_exists($path)) {
echo 'Файл не найден';
}
else {
$size = filesize($path);
header('Content-Type: application/msword');
header('Content-Length: ' . $size);
header('Content-Disposition: Attachment; FileName="' . $path . '"');
readfile($path);
}
?>
При переходе по такой ссылке Web-браузер выведет диалоговое окно с запросом "Что делать с файлом?"
С помощью заголовков можно вывести данные, которые будут обработаны Microsoft Excel:
<?php
$text = "Артикул\tНазвание\tКоличество\n";
$text .= "001\tДискета\t100\n";
$text .= "002\tМонитор\t5\n";
$text .= "003\tHDD\t12\n";
header('Content-type: application/vnd.ms-excel');
$d = date('d_m_Y');
header('Content-Disposition: Attachment; FileName="price_' . $d . '.xls"');
echo $text;
exit();
?>
У этого способа существует минус. По умолчанию все ячейки таблицы имеют формат "Общий". В этом формате число 001 будет преобразовано в число 1, нули в начале будут удалены. Задать формат "Текстовый" для определенной ячейки можно, представив таблицу в формате HTML:
<?php
header('Content-type: application/vnd.ms-excel');
$d = date('d_m_Y');
header('Content-Disposition: Attachment; FileName="price_' . $d . '.xls"');
?>
<html>
<head>
<title>Пример</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<style type="text/css">
td {
font-size:10.0pt;
font-family:"Arial Cyr";
mso-number-format:General;
text-align:general;
vertical-align:bottom;
white-space:nowrap;
}
.txt { mso-number-format:"\@"; }
</style>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0">
<tr valign="bottom">
<td class="txt" width="65"><b><center>Артикул</center></b></td>
<td width="100"><b><center>Название</center></b></td>
<td width="100"><b><center>Количество</center></b></td>
</tr>
<tr valign="bottom">
<td class="txt">001</td>
<td>Дискета</td>
<td>100</td>
</tr>
<tr valign="bottom">
<td class="txt">002</td>
<td>Монитор</td>
<td>5</td>
</tr>
<tr valign="bottom">
<td class="txt">003</td>
<td>HDD</td>
<td>12</td>
</tr>
</table>
</body>
</html>
Обратите внимание, нули в артикуле остались. Чтобы узнать какие значения необходимо указать, создайте таблицу в Excel, отформатируйте данные, а затем сохраните таблицу в формате HTML и отобразите исходный код.
Посмотреть заголовки, отправляемые сервером, позволяет функция get_headers(). Функция имеет следующий формат: get_headers(<URL-адрес>);
В параметре <URL-адрес> должен быть указан абсолютный путь к файлу:
$url = "http://localhost/index.php";
echo "<pre>";
print_r(get_headers($url));
echo "</pre>";
Функция возвращает массив с заголовками, который будет отображен так:
Array (
[0] => HTTP/1.1 200 OK
[1] => Date: Fri, 13 Nov 2009 22:32:17 GMT
[2] => Server: Apache/2.2.14 (Win32) PHP/5.3.0
[3] => X-Powered-By: PHP/5.3.0
[4] => Connection: close
[5] => Content-Type: text/html; charset=windows-1251
[6] => Content-Language: ru )
Так как функция header() устанавливает заголовки ответа сервера, которые посылаются до отсылки основного содержимого документа, то перед функцией не должно быть никаких операторов вывода. Даже пустая строка перед открывающим PHP-дескриптором (<?php) вызовет ошибку. Пустые строки внутри PHP-дескрипторов ошибку не генерируют, так как вывод информации осуществляется только с помощью операторов echo или print. Кроме того, при использовании кодировки UTF-8 файл должен быть в кодировке UTF-8 без BOM.
Отправитель | Нити |
---|
4 пользователь(ей) активно (2 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 4 далее... |