Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
локи последних новостей. 
// . . . 
// Открываем базу данных с подписчиками. Ее формат был 
// рассмотрен нами ранее. 
$F=File("db.txt"); 
foreach($F as $s) { 
$User=explode("|",trim($s)); 
// Для удобства создаем для каждого значения ключи. 
$User=array( 
"name" => $User[0], 
"email" => $User[1], 
"time" => $User[2], 
"encode" => $User[3] 
); 
// Посылаем письмо по шаблону из файла mail.txt 
// очередному пользователю, переводя его в желаемую кодировку. 

Глава 32. Почтовые шаблоны 495 
PostMail($User['email'],"file:mail.txt",$User['encode']); 
} 
?> 
Этот код довольно красноречиво показывает, что работать с нашей новой функцией 
PostMail() очень просто. Большая его часть занимается не отправкой писем, а 
раз- 
бором записей в базе данных. Так как переменные $User и $News — глобальные, то 
не нужно предпринимать никаких дополнительных действий, чтобы использовать их 
в шаблоне письма. 
На этом мы завершим рассмотрение возможностей PHP по отправке электронной 
почты и разбору шаблонов писем. Я не затронул здесь тему, касающуюся включения 
в письма так называемых attachment'ов (или "вложенных файлов"), потому что в 
формате писем, содержащих "вложения", довольно легко запутаться. Любознатель- 
ный читатель всегда сможет добавить в модуль Mail.phl функции, позволяющие 
удобно работать с "вложениями". Для того чтобы разобраться с форматом таких пи- 

сем, можно даже не искать соответствующую документацию: достаточно просто по- 
смотреть на исходный текст письма, сгенерированного какой-нибудь почтовой про- 
граммой, и уловить закономерности размещения заголовков и блоков текста. 

Глава 33 
Разные советы 
В этой небольшой завершающей главе сведены воедино некоторые советы и приемы 
программирования сценариев, которым не было удалено достаточного внимания в 
остальных главах книги. 
Разделенные вычисления 
Большинство хостинг-провайдеров ставят ограничения на то время, в течение 
которо- 
го могут выполняться сценарии пользователя. Иными словами, если выполнение про- 

граммы занимает более определенного времени (например, 10 секунд), она прерыва- 

ется принудительным образом. Минимальный квант времени задается в файле 
конфигурации php.ini. Как правило, его хватает для большинства программ, но все 

же существуют Web-приложения, требующие длительной работы. 
Одним из таких приложений является автоматически генерируемая карта сервера. 
Она может представлять собой обычный сценарий на PHP, который рекурсивно обхо- 
дит все каталоги сервера и собирает информацию о файлах, которые в них 
находятся. 
Конечно, если сайт велик, кванта времени, отведенного хостинг-провайдером, 
может 
и не хватить. Кроме того, не очень вежливо заставлять пользователя ждать 
загрузки 
страницы карты сервера дольше нескольких секунд. 
Как же быть, если описанный сценарий нужен для вашего сайта? Для этого следует 
формировать карту не при каждом запросе, а лишь изредка, — ведь новые страницы 
добавляются на сервер довольно редко. Гораздо реже, чем, например, их загружают 

пользователи. Кроме того, наверное, пользователь не будет особенно недоволен, 
если 
изменение на карте сервера проявится не сразу же, а спустя некоторое время — 
на- 
пример, час. Главное для него, чтобы карта была всегда перед глазами, а значит, 
ото- 
бражалась быстро. 
Мы можем хранить уже "просчитанную" карту сервера в файле, быстро выдавая его 
пользователю при запросе. Но даже если мы собираемся обновлять этот файл всего 
лишь один раз в час (при очередном запросе карты пользователем), мы 
наталкиваем- 
ся на проблему нехватки кванта времени, выделенного хостинг-провайдером. 
Чтобы решить и эту проблему, придется разбить построение большой карты на мно- 
жество мелких этапов, каждый из которых занимает, скажем, не более 2-х секунд. 
Каждый такой этап должен запускаться при очередном обращении пользователя к 

Глава 33. Разные советы 497 
карте сервера, но уже после того, как содержимое временного файла с "просчитан- 

ной" картой будет отправлено пользователю. Таким образом, мы постепенно будем 
накапливать сведения и, как только весь сайт обработан, перестроим карту во 
вре- 
менном файле. В ближайший час будет отображаться именно она. 
Напишем функцию WalkSite(),
 
<<-[Весь Текст]
Страница: из 287
 <<-