Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP обучение на примерах - Кухарчик А..pdf
Скачиваний:
138
Добавлен:
24.05.2014
Размер:
23.87 Mб
Скачать

94

Программирование на РНР

Отправление письма в HTML-формате

Необходимость отправить письмо в HTML-формате возникает не так уж и редко, например, тогда, когда нужно организовать рассылку рекламных материалов компании. Это не обязательно может быть спам, а обыкновенная корпоративная рассылка. Конечно, в этом случае очень хотелось бы не просто помещать в такую рассылку текст, а оформлять его в соответствии со стандартами HTML.

Все, что нужно — это правильно сформировать заголовок, который отправляется вместе с письмом. Например:

<?

$header="Content-Type: text/html; charset=windows-1251\n";

mail("адрес, на который высылается письмо","Это может быть тема письма","

<h1>Сообщение в HTML-формате.</hl> <р>Допустимы любые теги<br>

<hr>

<table><tr><td>Boт, например — </td>

<td>таблицы</td></tr></table>

<hr>

",$header);

?>

Как видите, переменная $header имеет заголовок с типом Content-Type: text/html; Это указание почтовой программе воспринимать полученное сообщение как HTML-письмо. Экспериментируя с кодом, вы сможете составлять такие письма и красиво оформлять их. Только не забудьте задать адрес, по которому будет отправлено письмо, и указать его тему.

Отправление письма в HTML-формате

 

95

А вот и еще один вариант, который позволяет выбрать кодировку отправляемого письма:

$to = "адрес, на который высылается письмо";

$subject = "тема письма";

$text = "текст письма";

$from = "от кого письмо";

$kodir = "кодировка письма";

//$kodir = "windows-1251";

//$kodir = "koi8-r";

$header = "From: $from\nReply-To: $from\n";

$header .= "MIME-Version: 1.0\n";

$header .= "Content-Type: text/plain; charset=$kodir\n";

$header .= "Content-Transfer-Encoding: 8bit\n\n";

$header .= "$text\n";

mail($to, $subject, $text, $header);

Надеюсь, вам уже все понятно без подробного рассмотрения примера. Видите закомментированные строки? В первых двух — варианты русской кодировки. Выбирайте ту, которая вам нужна. Последний знак комментария надо убрать, если письмо предполагается в HTML-формате. Только в этом случае не забудьте поставить комментарий на предыдущей строке.

96

Программирование на РНР

Дата по-русски

Задача — вывести на экран пользователя дату на русском языке. Решение:

<?php

// определяем массив для месяцев $q[] = "";

$q[] = "января"; $q[] = "февраля"; $q[] = "марта"; $q[] = "апреля"; $q[] = "мая"; $q[] = "июня"; $q[] = "июля";

$q[] = "августа"; $q[] = "сентября"; $q[] = "октября"; $q[] = "ноября"; $q[] = "декабря";

//определяем массив для дней недели $е[0] = "воскресенье"; $е[1] = "понедельник"; $е[2] = "вторник"; $е[3] = "среда"; $е[4] = "четверг"; $е[5] = "пятница"; $е[6] = "суббота";

//считываем месяц

$m = date("m");

if ($m == "01") $m = 1; if ($m == "02") $m = 2;

if ($m

== "03") $m = 3;

if ($m

==

"04") $m = 4;

if

($m

==

"05")

$m

=

5;

if

($m

== "06")

$m

=

6;

Дата по-русски

97

if ($m == "07") $m = 7; if ($m == "08") $m = 8; if ($m == "09") $m = 9;

// считываем день недели $we = date("w");

//считываем число $chislo = date("d") ;

//извлекаем день недели из ранее определенного массива $е $den_nedeli = $e [$we];

//извлекаем значение месяца из ранее определенного

//массива $q

$mesyac = $q[$m];

echo "Сегодня " . $ chislo . " ".$mesyac", " . $den_nedeli; ?>

Этот скрипт не идеален, но работоспособен и хорошо подходит для того, чтобы учиться. Рассмотрим, как он работает. Сначала нужно определить два массива, в которых будут храниться соответственно русское название месяца и русское название дня недели. Месяц не может быть нулевым, поэтому нужно позаботиться о вводе элемента массива с нулевым индексом. Если индекс массива не указан, он принимается равным внутреннему указателю. Если массив пуст и еще не определен, внутренний указатель находится на первом элементе (в данном случае — на имеющем нулевой индекс).

Ввод нового элемента массива перемещает внутренний указатель на единицу вверх, и таким образом обеспечивается последующий ввод значения в ячейку массива, имеющую индекс, на единицу больший, чем предыдущий. В принципе, можно обеспечить ввод данных в массив разными способами. Но указанный здесь — самый простой и легкий для понимания. Мы просто присваиваем поочередно нужные нам данные элементам массива и таким образом заполняем его.

98

Программирование на РНР

Точно так же и со вторым массивом, в котором индекс ячеек задается явно и внутренний указатель устанавливается на тот индекс, который задан. После ввода значения указатель также перемещается вверх на единицу. Разница между этими двумя методами в том, что при незаданных индексах заполнится ячейка массива, на которую указывает внутренний указатель. А он ведь может находиться и не в конце. А если индекс указан явно, внутренний указатель устанавливается на его значение, и запись происходит в явно указанную ячейку.

Когда массивы определены, нам нужно считать номер месяца. Если номер месяца меньше 10, он считывается с первым нулем (т.е. 02), и поэтому нам нужно отсечь ноль. Можно использовать разные алгоритмы и методы, но мы воспользуемся очень простым, но достаточно громоздким решением — сравним полученное решение с рядом заранее известных вариантов и изменим номер месяца на правильный без нуля. Но так делать не рекомендуется — есть более изящные методы. Например, проверить полученное значение на наличие первого ноля и, если результат проверки — истина (самый первый символ в строке — ноль), удалить первый символ.

Далее по ходу скрипта считываем день недели и число. С числом делать ничего не нужно, так как дата будет понятна всем, а вот день недели и месяц нужно обработать. Извлекаем из введенного нами ранее массива $е день недели. Номер дня недели указывает на ячейку массива, в котором хранится нужное русское имя, и таким образом мы в любом случае получим правильное значение. Изменяется номер дня недели — изменяется индекс ячейки, из которой считывается значение. Причем в отличие от массива с именем месяца, здесь нолю соответствует воскресенье, что мы и учли при вводе массива дней недели. Точно такую же операцию проводим и для месяца. Его номер указывает на ячейку массива, где хранится правильное имя месяца на русском языке.

В конце выводим результат на экран в произвольной форме.

Соседние файлы в предмете Программирование