| |
в строку, выглядящую как месяц/число/год. На-
верняка затем вы захотите разбить эту строку на составляющие, чтобы работать с
ними по отдельности. Для этого воспользуйтесь функцией explode():
$jd = GregorianToJD(10,11,1970);
echo "$jd \n";
$gregorian = JDToGregorian($jd);
echo "$gregorian \n";
$list=explode($gregorian,"/");
mixed JDDayOfWeek(int $julianday, int $mode)
Последняя функция этой серии — JDDayOfWeek() — тоже совершенно незаменима:
она возвращает день недели, на который приходится указанная JDC-дата. Фактиче-
ски, это единственное, чего нам не хватало бы для формирования календарика. Па-
раметр $mode задает, в каком виде должен быть возвращен результат:
r 0 — номер дня недели (0 — воскресенье, 1 — понедельник, и т. д.);
r 1 — английское название дня недели;
r 2 — сокращение английского названия дня недели.
В PHP существует еще множество функций для работы с другими календарями — в
том числе с Республиканским, Юлианским и т. д. Объем книги не позволяет
привести
здесь их описания.
Глава 20
Посылка писем
через PHP
Одно из самых мощных средств PHP — возможность автоматической посылки писем
по электронной почте, минуя использование внешних программ и утилит. Функция
отсылки встроена в PHP. С нее мы и начнем.
Функция отправки письма
bool mail(string $to, string $subject, string $msg [,string $headers])
Функция mail() посылает сообщение с телом $msg (это может быть "многострочная
строка", т. е. переменная, содержащая несколько строк, разделенных символом
пере-
вода строки) по адресу $to. Можно задать сразу нескольких получателей, разделив
их адреса пробелами в параметре $to. Пример:
mail("[email protected] [email protected],
"My Subject",
"Line 1\nLine 2\nLine 3"
);
В случае, если указан четвертый параметр, переданная в нем строка вставляется
ме-
жду концом стандартных почтовых заголовков (таких как To, Content-type и т. д.)
и началом текста письма. Обычно этот параметр используется для задания дополни-
тельных заголовков письма. Пример:
mail("[email protected] [email protected]",
"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: лучше задавать в нем всегда пустую строку и ука-
Часть IV. Стандартные функции PHP 286
зывать заголовок Subject в самом письме. Всегда старайтесь поступать таким
обра-
зом. Далее будет ясно, зачем.
Проблема с кодировками
Думаю, не надо напоминать, что русских кодировок существует великое множество.
Поэтому от того, насколько умело вы перекодируете письмо перед его отсылкой,
за-
висит, прочтет ли его получатель или, махнув рукой, отправит в корзину, даже не
попытавшись установить в своем почтовом клиенте нужную кодировку. Эта глава как
раз и призвана раз и навсегда решить проблему кодировок. Если вы воспользуетесь
советами, изложенными в ней, ваши письма всегда будут читаемыми.
Посылка в указанной кодировке
Сначала давайте договоримся об одном соглашении: функции mail() передавать
только адрес получателя и текст письма. Ни заголовков, ни темы — и то и другое
должно присутствовать в самом письме. Например:
$message=
"From: Лист рассылки
To: Иванов Иван Иванович
Subject: Пробная рассылка
Content-type: text/plain; charset=windows-1825
Уважаемый товарищ! Это письмо послано почтовым роботом.
Всего хорошего!";
Mail("[email protected]","",$message);
Обратите внимание на заголовок Content-type (в некоторых системах он обяза-
тельно должен стоять последним — проверьте это экспериментально). Он задает,
что,
во-первых, письмо доставляется как простой текст (text/plain), а во-вторых, что
его кодировка — Windows. Теперь письмо всегда можно будет прочитать, даже если
почтовая программа клиента по умолчанию настроена на китайскую кодировку.
И почему некоторые программы так не делают, а посылают письма без указа-
ния их кодировки? Неужели им жалко лишнего десятка байтов для названия
кодировки?
Обратите внимание на то, что тело письма отделяется от заголовков пустой
строкой, с
тем, чтобы почтовая программа могла понять, где кончаются заголовки и
начинается
тело.
Глава 20. Посылка писем через PHP 287
Динамическая смена кодировки
Приведенное в предыдущем примере письмо можно будет прочитать в 90% сущест-
вующих почтовых программ. Для "удовлетворения" остальных желательно посылать
письма не
|
|