- •В.С. Романчик
- •Глава 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. Популярные веб-приложения и фреймворки
- •Фреймворки
Работа с сеансовыми переменными
Другая необходимость, возникающая при работе с сеансами — определить, были ли зарегистрированы сеансовые переменные. Это можно сделать с помощью оператора isset, позволяющего проверить существование соответствующего ключа в массиве $_SESSION, или функции session_is_registered($name), где $name — строка, представляющая имя сеансовой переменной, которую нужно проверить. Эта функция возвращает true, если переменная была зарегистрирована, и false — если нет.
Для того чтобы реально продемонстрировать работу сеансов в РНР, сначала нужно создать ситуацию, в которой пользовательские данные должны быть сохранены во время запроса к серверу. Идеальным примером, удовлетворяющим таким требованиям, является пример с тележкой для покупок. Предположим, что вся функциональность тележки заключена в одном PHP-классе ShoppingCart. В этой ситуации для каждого покупателя создается единственный экземпляр тележки, который регистрируется как сеансовая переменная, сохраняемая в массиве $_SESSION. Для каждого последующего запроса экземпляр (и все его данные) пересоздаются РНР. Пример с тележкой для покупок на РНР
Файл ShoppingCart.class.php
<?php
class ShoppingCart { private Scart;
function construct() (
$this->cart = array));
public function addltem($id, Sname, $cost) {
foreach($this->cart as $key=>$items) {
if(Sitemsfid'] == Sid) {
Sthis->cart[Skey]['quantity']++; return;
}
)
$this->cart[] = array('id' => Sid,'name' => 'cost' => 'quantity'
' => Sname, ' => Scost, tity' => 1);
public function delltem(Sid) {
foreach(Sthis->cart as $key => Sitems) (
if<Sitems['id'] == $id) {
if($items['quantity'] > 1) (
Sthis->cartt$key]('quantity']—; } else {
unset($this->cart[Skey));
)
return true;
}
]
return false;
)
public function getCartO ( return $this->cart;
}
public function clearCartf) { $this->cart = array ();
?>
Файл Listing68.php
<?php
require_once("ShoppingCart.class.php");
session_start();
if(lisset($_SESSI0NI'cart']) || !is_object($_SESSI0N[1 cart'])) ( S_SESSI0N['cart'] = new ShoppingCart();
/*Добавить книгу в тележку(элемент #43 стоимостью $49.95) */
$_SESST0N['cart']->addltem(43,"Book:PHP Unleashed",49.95);)
?>
Для объектов, пересоздаваемых внутри сеанса, в РНР должен быть определен начальный класс. Это означает, что определение класса ShoppingCart должно быть включено в сценарий для переменной $_SESSION [' cart' ], чтобы она могла быть корректно пересозданной.
Постоянные данные, использующие сеансы и cookie-наборы
Поскольку иногда формат, предлагаемый $ID, может быть неприемлемым (как будет показано, при передаче информации о сеансе через HTML-форму), в РНР предусмотрены две функции session_name() и session_id(), которые возвращают, соответственно, имя сеанса и его идентификатор. Независимо от используемого метода, идентификатор сеанса должен использоваться каждый раз, когда URL ссылается на внутренний ресурс. Например, при использовании гиперссылки обычно прекрасно работает константа $ID:
<А HREF="checkout.php?<?php echo $ID; ?> ">Перейти к окончательному расчету</А>
С другой стороны, при работе с HTML-формами, идентификатор сеанса передается с помощью скрытых элементов формы. В следующей ситуации для присваивания соответствующих значений должны использоваться функции session_name() и session_id().
<FORM ACTION="order.php" METHOD=GET>
<INPUT TYPE="hidden" NAME="<?php echo session_name(); ?>"
VALUE="<?php echo session_id(); ?>"> <!— Остальной HTML-код формы //—> </FORM>
При передаче идентификатора сеанса важно понимать, что это нужно делать, только если URL относится к локальному Web-серверу. Для предотвращения негативных последствий, связанных с безопасностью, идентификатор сеанса никогда не следует передавать во внешних URL.
В большинстве случаев URL может быть автоматически пересоздан за счет включения режима прозрачной передачи идентификатора сеанса, активизировав директиву конфигурации session.use_trans_sid. Когда режим прозрачной передачи идентификатора сеанса включен, РНР пытается автоматически добавлять идентификатор сеанса к соответствующим HTML-дескрипторам.
Какие URL переписаны и будут посылаться в браузер, РНР определяет с помощью директивы конфигурации url_rewriter .tags. В этой директиве задается разделяемый запятыми список, имеющий следующий формат:
<HTML tag>=<Attribute>
где <HTML tag> — это HTML-дескриптор, который должен быть обработан, a <Attribute> — это атрибут того HTML-дескриптора, который содержит URL для перезаписи. Значение по умолчанию для директивы url_rewriter. tags выглядит так:
url_rewr iter.tags = "a=href,area=href,frame=src,input=src,form=fakeentrу"
