- •Тема 1 Основы cgi-программирования
- •1.1 Методы передачи данных
- •1.2 Передача документа пользователю
- •1.3 Передача информации cgi-сценарию
- •Тема 2 Характеристика языка php
- •2.1 Принцип работы php
- •2.2 Переменные, константы, выражения
- •Тема 3 Работа с данными формы
- •3.1 Передача данных
- •3.2 Трансляция полей формы в переменные
- •Тема 4 Конструкции языка
- •4.1 Условные инструкции
- •4.2 Инструкции циклов
- •4.3 Инструкции включения
- •Тема 5 Ассоциативные массивы
- •5.1 Списки и ассоциативные массивы
- •5.2 Операции над массивами
- •5.3 Списки и строки
- •5.4 Сериализация
- •Тема 6 Работа с массивами
- •6.1 Сортировка массивов
- •6.2 Функции для работы с массивами
- •Тема 7 Функции и области видимости
- •7.1 Формат определения функции, передача параметров
- •7.2 Глобальные, локальные, статические переменные
- •7.3 Рекурсия, вложенные и условно-определяемые функции
- •7.4 Передача функций по ссылке и возврат функцией ссылки
- •Тема 8 Строковые функции
- •8.1 Функции работы со строками
- •8.2 Работа с блоками текста
- •Тема 9 Математические функции
- •9.1 Встроенные константы
- •9.2 Встроенные функции
- •Тема 10 Работа с файлами и каталогами,
- •10.1 Функции работы с файлами
- •10.2 Блокирование файла
- •10.3 Функции работы с каталогами
- •10.4 Запуск внешних программ
- •Тема 11 Работа с датами и временем,
- •11.1 Представление времени в формате timestamp
- •11.2 Работа с датами, григорианский календарь
- •11.3 Посылка писем через php
- •Тема 12 Работа с www
- •12.1 Установка заголовков ответа
- •12.2 Работа с Cookies
- •Тема 13 Управление интерпретатором
- •13.1 Управление интерпретатором
- •13.2 Управление сессиями
- •Тема 14 Работа с базой данных mysql
- •14.1 Соединение с базой данных
- •14.2 Выполнение запросов к базе данных
- •Тема 15 Загрузка файлов на сервер
- •15.1 Multipart-формы, тег выбора файла
- •15.2 Поддержка закачки в php
- •Учебное издание
- •Разработка программного обеспечения на платформе net: php.Net
- •246019 Г. Гомель, ул. Советская, 104
11.3 Посылка писем через php
Одно из самых мощных средств PHP – возможность автоматической посылки писем по электронной почте, минуя использование внешних программ и утилит. Функция отсылки встроена в PHP.
Функция отправки письма
bool mail(string $to, string $subject, string $msg [,string $headers])
Функция mail() посылает сообщение с телом $msg (это может быть «многострочная строка», т. е. переменная, содержащая несколько строк, разделенных символом перевода строки) по адресу $to. Можно задать сразу нескольких получателей, разделив их адреса пробелами в параметре $to. Пример:
mail("rasmus@lerdorf.on.ca ca.ok@oklab.ru,
"My Subject", "Line 1\nLine 2\nLine 3");
Если указан четвертый параметр, переданная в нем строка вставляется между концом стандартных почтовых заголовков (таких как To, Content-type и т. д.) и началом текста письма. Этот параметр используется для задания дополнительных заголовков письма. Пример:
mail("ssb@guardian.no dk@dizain.ru",
"the subject",
"Line 1\nLine 2\nLine 3",
"From: webmaster@$SERVER_NAME\n".
"Reply-To: webmaster@$SERVER_NAME\n".
"X-Mailer: PHP/" . phpversion());
Гораздо лучше было бы включить указанные заголовки прямо в тело письма $msg (в начало тела), отделив их от самого письма пустой строкой (как в стандарте HTTP). То же самое применимо и к параметру $subject: лучше задавать в нем всегда пустую строку и указывать заголовок Subject в самом письме.
Посылка в указанной кодировке. Чтобы не возникало приблем с кодировками при отправке писем, нужно функции mail() передавать только адрес получателя и текст письма. Ни заголовков, ни темы – и то и другое должно присутствовать в самом письме. Пример:
$message=
"From: Лист рассылки
To: Иванов Иван Иванович
Subject: Пробная рассылка
Content-type: text/plain; charset=windows-1825
Уважаемый товарищ! Всего хорошего!";
Mail("ivanov@ivan.ivanovich.ru","",$message);
Заголовок Content-type (в некоторых системах он обязательно должен стоять последним) задает, что, во-первых, письмо доставляется как простой текст (text/plain), а во-вторых, что его кодировка – Windows. Тело письма отделяется от заголовков пустой строкой, с тем, чтобы почтовая программа могла понять, где кончаются заголовки и начинается тело.
Тема 12 Работа с www
12.1 Установка заголовков ответа
12.2 Работа с Cookies
12.1 Установка заголовков ответа
Рассмотрим средства PHP для работы с заголовками HTTP.
Вывод заголовка
int Header(string $string)
Функция предназначена для установки заголовков ответа, которые будут переданы браузеру – по одному заголовку на вызов. Она может быть вызвана только до первой команды вывода сценария (если до этого не использовалась функция буферизации ob_start()). Текст вне <? и ?> также рассматривается как оператор вывода, потому не нужно делать лишних пробелов до первой «скобки» <? в сценарии (и в особенности в файле, который этим сценарием включается) и, конечно, после последнего ограничителя ?> во включаемом файле. Пример:
// перенаправляет браузер на сайт PHP
Header("Location: http://www.php.net");
// принудительно завершаем сценарий
exit;
Запрет кэширования. Еще одно полезное приложение функции Header() – запрет кэширования документа браузером и Proxy-серверами. Большинство сценариев формируют документы, которые при каждом запуске программы изменяются. Выход – использовать в начале сценария следующие команды:
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// Дата в прошлом
Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
Header("Pragma: no-cache"); // HTTP/1.0
Header("Last-Modified:" .gmdate("D,dMYH:i:s")."GMT");
Для полного запрета кэширования нужно всегда посылать 4 указанных заголовка, и ни один пропустить нельзя – в противном случае не сработает либо браузер, либо Proxy-сервер.
Получение заголовков запроса. Для получения всех заголовков запроса следует воспользоваться функцией GetAllHeaders():
array GetAllHeaders()
Функция GetAllHeaders() возвращает ассоциативный массив, содержащий данные о HTTP-заголовках запроса клиента, породившего запуск сценария. Ключи массива содержат названия заголовков, а значения – их величины. Пример:
$headers = GetAllHeaders();
foreach($headers as $header=>$value)
echo "$header: $value<br>\n";
Функция GetAllHeaders() поддерживается PHP только в том случае, если он установлен в виде модуля Apache.
