
- •В.С. Романчик
- •Глава 2. Использование php.
- •Глава 3.
- •Введение
- •Возможности php.
- •Инструменты для разработки
- •Как php работает
- •Глава 1. Язык php Типы данных
- •Массивы и инициализация массивов
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и директива error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Язык запросов sql
- •Операция соединения.
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Некоторые улучшения в организации работы с данными
- •Передача данных от клиента к серверу и от сервера клиенту
- •Клиентские методы http get, post, head
- •Обработка html-форм и передача переменных в скрипт.
- •Передача значений переменных по методу get
- •Ниже рассмотрен еще один пример передачи данных из клиентской формы на сервер по методу get
- •Передача данных на сервер по методу post
- •Php и обработка различных форм
- •Примеры обработки форм
- •Работа с e-mail
- •Отправка почты на php (Функция mail)
- •Cookies-наборы: сохраненное состояние
- •Сессии (Сеансы) Переменные сеанса
- •Отмена регистрации сеансовых переменных
- •Работа с сеансовыми переменными
- •Постоянные данные, использующие сеансы и cookie-наборы
- •Вывод графических данных с помощью рнр Основной способ создания изображений
- •Получение информации об изображении
- •Функции рисования прямых и кривых линий
- •Заливка изображений
- •Работа с палитрой изображения
- •Удаление и изменение цветов палитры
- •Создание прозрачности в изображениях
- •Рисование с помощью кистей
- •Использование специальных стилей для заливки
- •Использование шрифтов и вывод строк
- •Манипулирование и копирование изображений
- •Создаём графический информер на php
- •Слияние изображений с помощью gd
- •Включения удаленных файлов
- •Различные приложения и полезные скрипты на php
- •Пример. Определение типа и версии браузера
- •Генератор паролей на php
- •Время выполнения скрипта
- •Календарь
- •Загрузка файла от клиента на сервер
- •Работа с ftp на уровне php
- •Сбор статистики на php
- •Проверка ввода емайл
- •Чтение почты через Web-интерфейс
- •Разработка собственных листов рассылки
- •Рассылаем письма
- •Добавляем адреса в список рассылки
- •Редактирование адресов
- •Автоответчик
- •Почтовые функции в рнр
- •Задания для выполнения
- •Приложение 1. Протокол передачи гипертекстов http
- •Клиентские методы и заголовкиHttp
- •Указатель ссылки ("Referer")
- •Медиа-типы
- •Кодирование
- •Безопасность и авторизация
- •Кэширование содержимого http на стороне клиента
- •Http идентификация с php
- •Сжатие данных в протоколе http
- •Модель ajax: между загруженной в браузер страницей и сервером появляется прослойка - уровень ajax, который обеспечивает следующую последовательность выполнения приложения.
- •Класс xmlHttpRequest
- •Методы класса xmlHttpRequest
- •Свойства класса xmlHttpRequest
- •Создание экземпляра объекта xmlHttpRequest
- •Использование dom
- •Проблема с кешированием
- •Информируйте пользователя
- •Нет принципов написания кода
- •Аутентификация средствами php
- •Отделение клиентская части программы от серверной части и шаблоны
- •Использование шаблонов в php
- •Шаблоны подстановки
- •Создаем свои шаблоны в php
- •Теги, атрибуты, значения
- •Структура документа
- •Разрыв строки
- •Предварительное форматирование
- •Комментарии
- •Физическая и логическая разметка документа
- •«Физические» теги:
- •«Логические» теги:
- •Специальные символы
- •Графика
- •Формы html
- •Метатеги
- •Способы включения каскадных таблиц стилей
- •Синтаксис
- •Группирование
- •Наследование
- •Множественные классы.
- •Селекторы идентификаторов (id-селекторы).
- •Комментарии
- •Свойства шрифтов.
- •Свойства текста.
- •Представление документа в виде специальных областей – блоков
- •Отступы, поля, позиционирование.
- •Границы элементов.
- •Визуальные эффекты
- •Свойства списков
- •Свойства таблиц
- •Псевдоклассы
- •Псевдостили текста
- •Псевдоэлементы
- •Различные свойства
- •Css. Примеры
- •Типы данных
- •Ассоциированные массивы
- •Операторы
- •Подпрограммы
- •Приложение 11. Популярные веб-приложения и фреймворки
- •Фреймворки
Работа с e-mail
E-mail посылается с сервера Web через его службу простого протокола пересылки почты SMTP. Если удаленного SMTP сервера нет, должен быть запущен почтовый транспортный агент (МТА). В Linux/Unix пакетами SMTP являются Sendmail и Qmail.
В операционных системах XP Professional, службы SMTP объединены с информационными службами Интернет (IIS). При выполнении PHP на сервере с помощью служб SMTP IIS, может понадобиться сконфигурировать его, чтобы разрешить пересылку сообщений e-mail. Выполните следующие действия.
1. Откройте инструменты администрирования IIS
2. Остановите используемую по умолчанию службу виртуального сервера SMTP.
3. Откройте окно свойств используемого по умолчанию виртуального сервера SMTP.
4. Щелкните на вкладке "Access" и нажмите кнопку "Relay...".
5. Нажмите кнопку "Only the list below" и добавьте один компьютер с IP-адресом 127.0.0.1.
6. Нажмите кнопку "OK", чтобы закрыть окно вкладок и свойств "Access".
7. Перезапустите используемую по умолчанию службу виртуального сервера SMTP.
Чтобы система PHP могла использовать службы SMTP необходимо также сделать следующие изменения в конфигурационном файле PHP — php.ini. Откройте файл php.ini с и найдите следующие строки:
[mail function]
;For Win32 only
SMTP = localhost
;For Win 32 only
sendmail_from = me@localhost.com
Необходимо изменить директиву SMTP, чтобы она указывала на используемый сервер SMTP. Если используются локальные службы SMTP, то это значение должно быть задано как localhost. Вторая директива sendmail_from является адресом email, применяемым в заголовке From исходящей почты e-mail.
В PHP для отправки e-mail используется функция:
bool mail(string $to,string $subj,string $msg[,string $headers[,string ad_par]]);.
Эта функция отправляет сообщение $msg получателю $to. Разделив запятой адреса, можно задать несколько получателей, например $to= user@example.com, anotheruser@example.com. Переменная $subj указывает тему, headers содержит необязательные заголовки, в число которых входит и адрес отправителя,. С помощью функции mail() можно высылать сообщения с присоединенными файлами. Функция возвращает TRUE, если почта была успешно принята для доставки, FALSE в ином случае. Рассмотрим пример использования функции mail():
<?php
$to = 'address@domain.com';
$subject = 'HelloMail’;
$message = 'hello';
$headers = 'From: master@example.com' . "\r\n" .
'Reply-To: master@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers))
{ print("Yes");} else{ print("No"); };
?>
Четвертый параметр представляет заголовки $headers, которые являются строками в начале сообщений e-mail. Хотя функция mail() может использоваться без заголовков, рекомендуется включать заголовки "From:" и "Reply-To:"
$headers = "From: My Web Site <myaddress@mydomain.com>";
$headers .= "Reply-To: myaddress@mydomain.com";
Фактически функция mail() не отправляет сообщение, а обрашается к почтовому агенту реализованному в функции sendmail(), который и выполняет эти действия. В системе Windows при использовании localhost функция sendmail() представляет псевдопочтового агента, который не отправляет почту, а помещает в файл.
В большом числе случаев параметры $to, $subject, и $message функции mail() создаются динамически в результате ввода пользователем данных из формы ввода. Следующий пример демонстрирует этот процесс:
<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en" lang="en">
<head>
<title>Страница registration.htm</title>
</head>
<body>
<h3> Страница регистрации </h3>
<form name="registration" method="post" action="email.php">
Name: <input type="text" name="fname"/>
Email Address: <input type="text" name="email"/>
Telephone: <input type="text" name="telephone"/>
<input type="submit" name="Submit Registration"/>
</form>
</body>
</html>
Страница registration.htm является стандартной страницей формы XHTML, которая позволяет пользователю вводить имя, фамилию, адрес e-mail и номер телефона. Когда нажимается кнопка "Submit Registration", данные формы передаются приложению PHP email.php как переменные PHP $_POST[]:
<?php // email.php
$to = $_POST[‘emai’l];
$subject = "Подтверждение регистрации";
$msg = "Дорогой: " . $_POST[fname] . " " . ",\n\n";
$msg .= "Вы успешно зарегистрировались.";
$headers = "From: Registration Site <myaddr@mydomain.com>";
$headers .= "Reply-To: registration@mydomain.com";
if(mail($to, $subject, $msg, $headers))
{
echo "Message sent!";
}
else {
echo "Message not sent!";
}
?>
Если в функцию mail() передаётся четвёртый строковой аргумент $headers, эта строка вставляется в конце заголовка header. Для разделения шапок-заголовков необходимо использовать символы \r\n. Рассмотрим пример.
mail("my@example.com", "subject", $message, "From: web@$SERVER_NAME\r\n" ."Reply-To: webmaster@$SERVER_NAME\r\n" ."X-Mailer: PHP/" . phpversion());
Параметр additional_param можно использовать для передачи дополнительных параметров программе, сконфигурированной для отправки почты установкой конфигурации sendmail_path, например, для установки адреса отправителя при использовании sendmail. При этом может понадобиться добавить пользователя под которым работает web-сервер, в sendmail-конфигурацию.
<FORM NAME="testForm" ACTION="php426.php" METHOD="POST">
name: <INPUT TYPE="text" NAME="name"><BR>
e-mail: <INPUT TYPE="text" NAME="email"><BR>
<INPUT TYPE="SUBMIT">
</FORM>
<?
function process_form()
{
global $name, $email;
/* Эта часть скрипта отправляет e-mail на указанный адрес */
$date=date( 'H:i:s, d.m.Yг.' );
mail("$email","Образец работы PHP с E-mail",
"$name", "Вы хотите \n","Отправлено $date\n");
print "$name, Ваша заявка успешно обработана.";
print 'заказ будет доставлен на указанный адрес E-mail.';
}
process_form();
?>
Вывод:
valera, Ваша заявка успешно обработана 21:49:45, 02.11.2003г. . заказ будет доставлен на указанный Вами адрес E-mail.
Рассмотрим еще один пример отправки почты. Часто хочется знать, что происходит на сайте за время Вашего отсутствия. Можно рассмотреть, например события регистрации в рассылке, ввода сообщения в форуме или в гостевую книгу, организации обратной связи, опрос мнения читателей.
Когда на сайте происходит то, или иное событие, можно присылать сообщение на свой почтовый ящик,. Для примера рассмотрим систему контроля за посетителями определенных страниц сайта. Информация о посетителе, которая в РНР автоматически доступна через суперглобальные переменные окружения будет отсылаться на указанный почтовый ящик. Каждое посещение такой страницы вызовет отправку письма.
<?php
if (isset ($HTTP_X_FORWARDED_FOR))
{
$host = gethostbyaddr($HTTP_X_FORWARDED_FOR);
} else {
$host = gethostbyaddr($REMOTE_ADDR); }
$ip=getenv('REMOTE_ADDR');
$date=date('d M Y, H:i:s');
$host1=gethostbyaddr("$ip");
$str=("Дата - $date Хост - $host IP-адрес - $ip ----------");
mail( $email, "статистика", $str, "From:информация");
?>
Если Вы разместите на одной из страниц этот код РНР, информация о посетителе страницы (дата входа, хост и IP-адрс) будет в Вашем почтовом ящике. Еще можно прислать себе сообщение при возникновении ошибки (например, открытия файла) на сайте:
$filename = "data.txt";
$fp = @fopen($filename,"r");
if ( !$fp )
{
@mail( $email, "Ошибка!", "Ошибка открытия файла $filename !");
}
Если в переменной $email указать несколько адресов, разделенных пробелами, информация будет разослана по всем указанным адресам. Это открывает простой путь к организации собственной системы почтовых рассылок.
Попутно надо решить проблемы с русскими кодировками. Стандартной кодировкой для электронной почты является KOI8-R, а большинство авторов страничек предпочитают использовать при создании web-страничек кодировку Win-1251. Поэтому для отправки корректного письма необходимо перекодировать его текст, а также заголовок в кодировку KOI8-R. PHP предоставляет функцию convert_cyr_string(), которая занимается русскими кодировками. Синтаксис функции простой:
convert_cyr_string(string $str, string $from, string $to),
где $str - строка, которая подвергается перекодировке, $from - исходная кодировка, $to - целевая кодировка. Параметры from и to могут принимать одно из следующих значений: k - koi8-r; w - windows-1251; i - iso8859-5; a - x-cp866; d - x-cp866; * m - x-mac-cyrillic.
Для описанного случая вызов функции будет выглядеть следующим образом:
$message = "Это текст письма в кодировке Win-1251";
$message = convert_cyr_string($message, "w", "k");
Еще с один вопрос - перенаправление странички на другой адрес. Для этого достаточно послать броузеру http-заголовок с параметром "Location", указывающим на адрес странички, куда мы хотим перейти. PHP позволяет напрямую посылать заголовки броузеру при помощи функции header(). Для нашего случая этот код может выглядеть следующим образом:
$redirect_url = "thanks.htm";
header("Location: $redirect_url");
Теперь попробуем собрать все описанное в единый скрипт:
<?
$mail_to = "Ваше имя <"."your@address.com".">";
$mail_from = $user["name"]." <".$user["email"].">";
// Формируем тему письма
$subject = "Отзыв с сайта";
//Формируем текст письма, удаляя экранирующие слеши сообщения
$message = stripslashes($user["message"]);
//Перекодируем сообщения из кодировки Win-1251 в KOI8-R
$mail_to = convert_cyr_string($mail_to, "w", "k");
$mail_from = convert_cyr_string($mail_from, "w", "k");
$subject = convert_cyr_string($subject, "w", "k");
$message = convert_cyr_string($message, "w", "k");
// Отправляем сообщение по электронной почте
mail($mail_to, $subject, $message, "From:$mail_from\n");
//Перенаправляем пользователя с подтверждением отправки //запроса
$redirect_url = "thanks.htm";
header("Location: $redirect_url");
?>