Рабочая тетрадь курса

Page 1

РНР. Уровень 3. Профессиональная разработка на PHP 5

РНР. Уровень 3. Профессиональная разработка на PHP 5

v.08.2009


РНР. Уровень 3. Профессиональная разработка на PHP 5

Содержание курса Модуль 1: Объектно-ориентированное программирование на PHP …………. 7 Модуль 2: Совместное использование PHP 5 и SQLite ………………………………. 33 Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT ……..…….. 49 Модуль 4: PHP 5 и XML Web Services. SOAP ........................…….…………………. 69 Модуль 5: Работа с графикой ...............................……………………………………… 75 Модуль 6: Сетевое программирование ...............................……………………… 81


Подготовка к работе

Подготовка к работе


Подготовка к работе

Предварительная подготовка Уверенная работа с компьютером Успешное окончание курса «РНР. Уровень 2. Разработка web-сайтов и взаимодействие с MySQL» или

Уметь устанавливать и настраивать сервер Apache 1.3 – 2.x и проверять его работу

Уметь устанавливать PHP как модуль сервера Apache Знать язык программирования PHP на уровне уверенного использования Уметь использовать формы HTML Уметь использовать сессии пользователя Уметь использовать модули PHP mysql (mysqli) Уметь работать с файлами на PHP Уметь использовать данные запроса и ответа протокола HTTP

Схемы курсов

Основы PHP

Создание PHP сайтов

Администрирование Веб-серверов

Профессиональное программирование на PHP

XML технологии

4

Сервер mySQL


Подготовка к работе

Создание виртуальной машины для Веб курса

Используется Microsoft Virtual PC Создается новая копия базового образа ВМ После курса машина удаляется

http://www.microsoft.com/windows/virtualpc/default.mspx

Создание и запуск виртуальной машины Создайте приложение Microsoft Virtual PC Пуск  Все программы  Создать виртуальную машину Откройте приложение Microsoft Virtual PC

Пуск  Все программы  Microsoft Virtual PC

5


Подготовка к работе

Виртуальная машина работает!

Полезные «горячие клавиши» полноэкранный режим [Right ALT] + [Enter] Alt + Ctrl + Del [Right ALT] + [Del]

Пути расположения программ:

Apache (установлен как служба Windows OS) C:\Program Files\Apache Group\Apache\ PHP C:\Program Files\PHP\

Оборудование рабочего места 1. Откройте в проводнике виртуальной машины папку C:\Program files\Apache Group\Apache\htdocs 2. Удалите ВСЕ файлы в этой директории 3. Установите в привод CD слушателя и откройте проводником этот диск 4. В папке CD_drive:\work найдите файл work.exe 5. Скопируйте файл work.exe на Рабочий стол виртуальной машины 6. Запустите файл work.exe (самораспаковывающийся архив) 7. Нажмите кнопку «Извлечь» 8. Дождитесь распаковки архива в папку htdocs 9. Запустите сервер Apache! 10. Проверьте работу сервера

6


Модуль 1: Объектно-ориентированное программирование на PHP

Объектно-ориентированное программирование на PHP Модуль 1


Модуль 1: Объектно-ориентированное программирование на PHP

Объектно-ориентированное программирование на PHP

ООП - введение

Классы Свойства и методы Конструкторы/деструкторы Клонирование объектов Перегрузка методов

Наследование Методы доступа Схема обработки исключений try/catch/throw

ООП (продолжение) Абстрактные классы и методы Интерфейсы

Финальные методы и классы Константы класса Статические свойства класса Статические методы класса

Перебор свойств объекта Псевдо-константы __METHOD__, __CLASS__ Ключевое слово instanceof Функция __autoload()

"Магические методы" Разное...

8


Модуль 1: Объектно-ориентированное программирование на PHP

Классы и объекты Описание класса class

MyClass {

// определение свойств // определение методов } Инициализация класса (создание объекта) $myObj

=

new MyClass();

9


Модуль 1: Объектно-ориентированное программирование на PHP

Свойства класса Описание свойств

class MyClass { public $property1; protected $property2 = "value2"; private $property3; } Доступ к свойствам класса $myObj = new MyClass(); $myObj->property1; Изменение значения свойств

$myObj->property2 = "other_value";

Лабораторная работа Практическое использование ООП: создание класса с набором свойств, создание экземпляря класса, инициализация значений свойств объекта Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 1 1. Создайте класс User со свойствами name, login и password 2. Создайте три объекта, экземпляра класса User 3. Задайте произвольные значения свойств name, login и password для каждого из объектов Запустите файл oop/users.php в браузере

10


Модуль 1: Объектно-ориентированное программирование на PHP

Методы класса Описание методов class MyClass { function myMethod($var1,$var2){ // операторы } } Вызов метода $myObj = new MyClass(); $myObj->myMethod('value1','value2');

$this class MyClass { public $property1; function myMethod(){ // Вывод значения свойства print($this->property1); } function callMethod(){ // Вызов метода $this->myMethod(); }

}

11


Модуль 1: Объектно-ориентированное программирование на PHP

Псевдо-константы __METHOD__ и __CLASS__ class MyClass { function myMethod(){ echo "Вызов метода ", __METHOD__; } function getClassName(){ echo "Имя класса ", __CLASS__; } } $obj = new MyClass(); // Вызов метода MyClass::myMethod $obj->myMethod(); // Имя класса MyClass $obj->getClassName();

Лабораторная работа Практическое использование ООП: работа с методами класса Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 2 1. В классе User опишите метод showInfo() 2. Метод showInfo() должен выводить значения свойств объектов 3. Вызовите метод showInfo() для каждого объекта Запустите файл oop/users.php в браузере

12


Модуль 1: Объектно-ориентированное программирование на PHP

Конструкторы и деструкторы class MyClass { public $property; function __construct($var){ $this->property = $var; echo "Вызван конструктор"; } function __destruct(){ echo "Вызван деструктор"; } } //Вызов конструктора $obj = new MyClass("Значение"); //Вызов деструктора unset($obj);

Лабораторная работа Практическое использование ООП: работа с конструктором класса Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 3 1. В классе User опишите конструктор 2. Конструктор должен задавать начальные значения свойств name, login и password 3. Создайте заново три объекта, экземпляра класса User Запустите файл oop/users.php в браузере

13


Модуль 1: Объектно-ориентированное программирование на PHP

Новые принципы работы с объектами Объекты передаются по ссылке, а не по значению class MyClass { public $property; } $myObj = new MyClass(); $myObj->property = 1; $myObj2 = $myObj; $myObj2->property = 2; print($myObj->property); // Печатает 2 print($myObj2->property); // Печатает 2

Клонирование объекта Явное копирование объектов class MyClass { public $property; } $myObj = new MyClass(); $myObj->property = 1; $myObj2 = clone $myObj; $myObj2->property = 2; print($myObj->property); // Печатает 1 print($myObj2->property); // Печатает 2

14


Модуль 1: Объектно-ориентированное программирование на PHP

Метод __clone() class MyClass { public $property; function __clone(){ $this->property = 2; } } $myObj = new MyClass(); $myObj->property = 1; $myObj2 = clone $myObj; print($myObj->property); // Печатает 1 print($myObj2->property); // Печатает 2

Лабораторная работа Практическое использование ООП: использование метода __clone() Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 4 1. В классе User опишите метод __clone() 2. Метод __clone() должен задавать начальные значения свойств по умолчанию при копировании объектов 3. Значения свойств по умолчанию: name = "Guest", login = "guest", password = "qwerty" 4. Создайте четвёртый объект скопировав один из имеющихся объектов Запустите файл oop/users.php в браузере

15


Модуль 1: Объектно-ориентированное программирование на PHP

Наследование(полиморфизм) class Car { public $numWheels = 4; function printWheels() { echo $this->numWheels; } } class Toyota extends Car { public $country = 'Japan'; function printCountry() { echo $this->country; } } $myCar = new Toyota(); $myCar->printWheels(); $myCar->printCountry();

Лабораторная работа Практическое использование ООП: создание дочернего класса Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 5 1. Опишите класс SuperUser наследованный от класса User 2. В классе SuperUser опишите свойство role и создайте объект, экземпляр класса SuperUser 3. Задайте значение свойству role = "admin" 4. Вызовите метод showInfo() для созданного объекта 5. Отдельно от метода showInfo() выведите значение свойства role Запустите файл oop/users.php в браузере

16


Модуль 1: Объектно-ориентированное программирование на PHP

Перегрузка методов class Car { public $numWheels = 4; function printWheels() { echo $this->numWheels; } } class Toyota extends Car { public $country = 'Japan'; function printCountry() { echo $this->country; } } function printWheels() { echo "Перегруженный метод printWheels() "; } } $myCar = new Toyota(); $myCar->printWheels();

Лабораторная работа Практическое использование ООП: конструктор дочернего класса и перегрузка методов Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 6 1. Опишите конструктор класса SuperUser, который будет задавать начальные значения свойств 2. В классе SuperUser опишите метод showInfo(), который будет выводить на экран значения всех свойств 3. Создайте заново объект класса SuperUser и вызовите метод showInfo() Запустите файл oop/users.php в браузере

17


Модуль 1: Объектно-ориентированное программирование на PHP

Parent class Car { public $numWheels = 4; function printWheels() { echo $this->numWheels; } } class Toyota extends Car { public $country = 'Japan'; function printWheels() { echo "Перегруженный метод printWheels() "; parent:: printWheels(); } } $myCar = new Toyota(); $myCar->printWheels();

Лабораторная работа Практическое использование ООП: использование родительского метода в перегруженном методе Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 7 1. Измените конструктор класса SuperUser, вызвав родительский конструктор 2. Передайте родительскому конструктору необходимые значения 3. Измените метод showInfo() класса SuperUser, вызвав родительский метод showInfo() 4. Передайте родительскому методу необходимые значения Запустите файл oop/users.php в браузере

18


Модуль 1: Объектно-ориентированное программирование на PHP

Спецификаторы доступа 

Модификатор public (общедоступный) позволяет иметь доступ к свойствам и методам классам из любого места Модификатор protected (защищенный) позволяет иметь доступ и родительскому (в котором определен сам член класса), и наследуемым классам Модификатор private (закрытый) ограничивает область видимости так, что доступ к нему имеет только тот класс, в котором объявлен сам элемент

Спецификаторы доступа: как это работает? class MyClass { public $public = 1; protected $protected = 2; private $private = 3; $obj = new MyClass();

function myMethod(){ echo $this->public; //ДА echo $this->protected; //ДА echo $this->private; //ДА }

echo $obj->public; //ДА echo $obj->protected; //НЕТ! echo $obj->private; //НЕТ $obj->myMethod(); } $obj1 = new NewClass(); echo $obj1->public; //ДА echo $obj1->protected; //НЕТ! echo $obj1->private; //НЕТ

class NewClass extends MyClass { function newMethod(){ echo $this->protected; //ДА echo $this->private; //НЕТ

$obj1->newMethod(); $this->myMethod(); } }

19


Модуль 1: Объектно-ориентированное программирование на PHP

Обработка исключений try { $a = 1; $b = 0; if($b == 0) throw new Exception("Деление на 0!"); echo $a/$b; }catch(Exception $e){ echo "Произошла ошибка - ", $e->getMessage(), // Выводит сообщение " в строке ", $e->getLine(), // Выводит номер строки " файла ", $e->getFile(); // Выводит имя файла }

Лабораторная работа Практическое использование ООП: генерирование и перехват исключения Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 8 1. Сделайте все параметры конструктора класса User параметрами по умолчанию со значениями «пустая строка» ("") 2. В конструкторе класса User генерируйте исключение, если введены не все данные 3. Опишите перехват исключения и выводите в браузер сообщение об ошибке 4. Попробуйте создать экземпляр класса User без какого-либо параметра(-ов) Запустите файл oop/users.php в браузере

20


Модуль 1: Объектно-ориентированное программирование на PHP

Создание собственных исключений сlass MathException extends Exception { function __construct($message) { parent::__construct($message); } } try { $a = 1; $b = 0; if ($b == 0) throw new MathException("Деление на 0!"); echo $a / $b; } catch (MathException $e) { echo "Произошла математическая ошибка ", $e->getMessage(), " в строке ", $e->getLine(), " файла ", $e->getFile(); }

Перебор свойств объекта class Human { public $name; public $yearOfBorn; function __construct($name, $yearOfBorn){ $this->name = $name; $this->yearOfBorn = $yearOfBorn; } } $billGates = new Human(‘Bill Gates’,1955); foreach($billGates as $name=>$value){ print($name.’: ’.$value.’<br />’); }

21


Модуль 1: Объектно-ориентированное программирование на PHP

Константы класса class Human { const HANDS = 2; function printHands(){ print (self::HANDS);// NOT $this! } } print ('Количество рук: '.Human::HANDS);

Лабораторная работа Константы класса: создание и использование Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 9 1. 2. 3. 4. 5. 6.

Создайте константу класса User INFO_TITLE Присвойте константе INFO_TITLE строковое значение «Данные пользователя:» Обратитесь к константе INFO_TITLE перед вызовами метода showInfo() Запустите код и проверьте его работоспособность Создайте метод showTitle() в классе User Опишите метод showTitle(), чтобы он выводил в браузер значение константы INFO_TITLE 7. Обратитесь к метод showTitle() перед вызовами метода showInfo() Запустите файл oop/users.php в браузере

22


Модуль 1: Объектно-ориентированное программирование на PHP

Абстрактные методы и классы abstract class Car { public $petrol; function startEngine(){ print('Двигатель завѐлся!'); } abstract function stopEngine(); } class InjectorCar extends Car { public function stopEngine(){ print('Двигатель остановился!'); } } $myMegaCar = new Car();//Ошибка! $myMegaCar = new InjectorCar(); $myMegaCar->startEngine(); $myMegaCar->stopEngine();

Лабораторная работа Абстрактные классы и методы: объявление и использование Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 10 1. 2. 3. 4.

Создайте абстрактный класс AUser В абстрактном классе AUser объявите абстрактный метод showInfo() Обновите класс User, унаследовав его от абстрактного класса AUser Внесите в класс User необходимые изменения

Запустите файл oop/users.php в браузере

23


Модуль 1: Объектно-ориентированное программирование на PHP

Интерфейсы class Human implements Hand , Foot interface Hand { function useKeyboard(); { public function useKeyboard(){ function touchNose(); echo 'Use keyboard!'; } } public function touchNose(){ interface Foot { echo 'Touch nose!'; function runFast(); function playFootball(); } public function runFast(){ } echo 'Run fast!'; } public function playFootball(){ echo 'Play football!'; } } $vasyaPupkin = new Human(); $vasyaPupkin->touchNose();

Лабораторная работа Интерфейсы: объявление и использование Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 11 1. 2. 3. 4. 5.

Создайте интерфейс ISuperUser В интерфейс ISuperUser объявите метод getInfo() Опишите метод getInfo() в классе SuperUser Метод getInfo() должен возвращать ассоциативный массив, в котором именами ячеек являются имена свойств объекта, а значениями ячеек - значения свойств объекта 6. Вызовите метод getInfo() для экземпляра класса SuperUser 7. В цикле выведите данные, полученные с помощью метода getInfo() Запустите файл oop/users.php в браузере

24


Модуль 1: Объектно-ориентированное программирование на PHP

Финальные методы class Mathematics { final function countSum($a,$b){ print('Сумма: ' . $a + $b); } }

class Algebra extends Mathematics { // Возникнет ошибка public function countSum($a,$b){ $c = $a + $b; print("Сумма $a и $b: $c"); } }

Финальные классы final class Breakfast { function eatFood($food){ print("Скушали $food!"); } } // Возникнет ошибка

class McBreakfast extends Breakfast { // Описание класса

}

25


Модуль 1: Объектно-ориентированное программирование на PHP

Статические свойства и методы класса class CookieLover { static $loversCount = 0; function __construct(){ ++self::$loversCount; } static function welcome(){ echo 'Добро пожаловать в клуб любителей булочек!'; //Никаких $this внутри статического метода! } } $vasyaPupkin = new CookieLover(); $frosyaBurlakova = new CookieLover(); print ('Текущее количество любителей булочек: '. CookieLover::$loversCount); print (CookieLover::welcome());

Лабораторная работа Статические свойства класса: объявление и использование Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 12 1. Опишите в классах User и SuperUser статические свойства для подсчета количества созданных объектов 2. Присвойте этим свойствам начальные значения (0) 3. В конструкторах инкрементируйте данные свойства 4. После создания экземпляров классов User и SuperUser выведите на экран количество тех и других объектов Запустите файл oop/users.php в браузере

26


Модуль 1: Объектно-ориентированное программирование на PHP

Ключевое слово instanceof class Human {} $myBoss = new Human(); if($myBoss instanceOf Human) print('Мой Босс – человек!'); class Woman extends Human {} $englishQueen = new Woman(); if($englishQueen instanceOf Human) print('Английская королева – тоже человек!'); interface LotsOfMoney {} class ReachPeople implements LotsOfMoney {} $billGates = new ReachPeople(); if($billGates instanceOf LotsOfMoney) print('У Билла Гейтса много денег!');

Лабораторная работа Ключевое слово instanceOf: проверка типа объекта Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 13 1. Опишите функцию checkObject(), которая принимает в качестве входящего параметра объект 2. Проверьте Ваш объект, используя следующие условия: a. Если объект является экземпляром класса SuperUser, выводите сообщение, что данный пользователь обладает правами администратора b. Если объект является экземпляром класса User, выводите сообщение, что данный пользователь является обычным пользователем c. Если объект не является ни тем, ни другим, выводите сообщение, что данный пользователь - неизвестный пользователь Запустите файл oop/users.php в браузере

27


Модуль 1: Объектно-ориентированное программирование на PHP

Функция __autoload()

function __autoload($cl_name){

print('Попытка создать объект класса '.$cl_name); }

$obj = new undefinedClass();

Лабораторная работа Функция __autoload(): объявление и использование Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 14 1. 2. 3. 4.

В директории «oop» создайте файл «User.class.php» Перенесите описание класса User из файла «users.php» в файл «User.class.php» В директории «oop» создайте файл «SuperUser.class.php» Перенесите описание класса SuperUser из файла «users.php» в файл «SuperUser.class.php» 5. Посторите те же действия для класса AUser и интерфейса ISuperUser 6. В файле «users.php» опишите функцию __autoload(), которая автоматически присоединяет файлы с описанием классов к файлу «users.php» Запустите файл oop/users.php в браузере

28


Модуль 1: Объектно-ориентированное программирование на PHP

Методы доступа к свойствам объекта class MyClass { private $properties; function __get($name){ print("Чтение значения свойства $name"); return $this->properties[$name]; } function __set($name,$value){ print("Задание нового свойства $name = $value"); $this->properties[$name] = $value; } } $obj = new MyClass; $obj->property = 1; // Задание нового свойства $a = $obj->property; // Чтение значения свойства print $a; // 1

Перегрузка вызова несуществующих методов class MyClass { function __call($name, $params){ print("Попытка вызова метода $name со следующими параметрами: "); print_r($params); } } $obj = new MyClass(); $obj->megaMethod(1,2,3,"четыре");

29


Модуль 1: Объектно-ориентированное программирование на PHP

Метод __toString() class MyClass { function __toString(){ return 'Вызван метод __toString()'; } } $obj = new MyClass(); // Вызван метод __toString() echo $obj;

Лабораторная работа Метод __toString(): преобразование объекта в строку Откройте в текстовом редакторе файл oop\users.php и выполните следующее задание:

Задание 15 1. Создайте свойство objNum, которое будет хранить порядковый номер объекта. Подумайте, где лучше его создать? 2. Внесите изменения в классе User (а может и в SuperUser?), которые будут присваивать свойству objNum, порядковый номер объекта. Подумайте, где и как лучше это сделать? 3. В классе User (а может и в SuperUser?) опишите метод __toString() Данный метод должен возвращать строку в формате «Объект #objNum: name». Например: «Объект #3: Василий Пупкин» 4. Попробуйте преобразовать один из созданных Вами объектов в строку

Запустите файл oop/users.php в браузере

30


Модуль 1: Объектно-ориентированное программирование на PHP

Разыменовывание объектов (если останется время) class MyClass1 { public function showClassName() echo "Объект класса MyClass1"; } class MyClass2 { public function showClassName() echo "Объект класса MyClass2"; } function deref($obj) { switch ($obj) { case "MyClass1": return new MyClass1(); case "MyClass2": return new MyClass2(); } } deref("MyClass1")->showClassName(); //Объект класса MyClass1 deref("MyClass2")->showClassName(); //Объект класса MyClass2

Уточнение типа класса (если останется время) class type hints interface Int1 { function func1(Int1 $int1); } interface Int2 { function func2(Int2 $int2); } class MyClass implements Int1, Int2 { public function func1(Int1 $int1) { // Код метода } public function func2(Int2 $int2) { // Код метода } } $obj1 = new MyClass; $obj2 = new MyClass; $obj1->func1($obj2); $obj1->func2($obj2);

31


Модуль 1: Объектно-ориентированное программирование на PHP

Выводы

ООП – парадигма программирования

Классы Свойства и методы Конструкторы/деструкторы

Клонирование объектов Перегрузка методов Наследование Методы доступа Схема обработки исключений try/catch/throw

Абстрактные классы и методы Интерфейсы Финальные методы и классы Константы класса Статические свойства класса Статические методы класса Ключевое слово instanceof Функции __autoload() Методы доступа к свойствам объекта Перегрузка несуществующих методов Перебор свойств объектов Константы __METHOD__, __CLASS__ Метод __toString()

32


Модуль 2: Совместное использование PHP 5 и SQLite

Совместное использование PHP 5 и SQLite Модуль 2


Модуль 2: Совместное использование PHP 5 и SQLite

Совместное использование PHP 5 и SQLite

Введение в SQLite

Преимущества и ограничения SQLite Особенности безопасности данных SQLite Выполнение основных операций работы с SQLite данными на PHP 5 – создание базы и таблиц, ввод, обновление, удаление и выборка данных Пример написания каталога товаров электронного магазина

34


Модуль 2: Совместное использование PHP 5 и SQLite

Введение в SQLite SQLite – библиотека, написанная на языке С Осуществляет механизм работы с данными с помощью SQL Реализованы как серверные, так и клиентские функции

http://sqlite.org Преимущества и ограничения использования SQLite Полностью бесплатна Нет необходимости в средствах администрирования Высокая производительность и легкая переносимость Поддержка процедурного и объектно-ориентированного интерфейсов Хранение данных объемом до 2 терабайт Хранение строк и бинарных данных неограниченной длины

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

35


Модуль 2: Совместное использование PHP 5 и SQLite

Производительность SQLite Устаревшие данные тестирования между SQLite 2.7.6, PostgreSQL 7.1.3, и MySQL 3.23.41 http://www.hwaci.com/sw/sqlite/speed.html

Свежие данные тестирования можно найти по адресу http://www.sqlite.org/cvstrac/wiki?p=SqliteCompetitors

Включение поддержки SQLite в PHP

В PHP 5.0 поддержка SQLite была встроена в ядро

Начиная с PHP 5.1 поддержка SQLite вынесена за пределы ядра extension=php_pdo.dll extension=php_pdo_sqlite.dll extension=php_sqlite.dll

36


Модуль 2: Совместное использование PHP 5 и SQLite

Особенности SQLite //Можно так CREATE TABLE users ( id INTEGER, name TEXT, age INTEGER ); //Или так CREATE TABLE users (id, name, age); //Для PRIMARY KEY и AUTOINCREMENT надо CREATE TABLE users (id INTEGER PRIMARY KEY, name, age); Нельзя использовать addslashes()!!! $clear = sqlite_escape_string($string);

Создание файла БД, открытие и закрытие соединения

$db = sqlite_open("test.db");

//ООП интерфейс $db = new SQLiteDatabase("test1.db"); sqlite_close($db);

//ООП интерфейс unset($db);

37


Модуль 2: Совместное использование PHP 5 и SQLite

Необходимые для работы файлы  gbook.php основной файл Гостевой книги  IGbookDB.class.php файл содержит интерфейс IGbookDB с декларациями методов для Гостевой книги  GbookDB.class.php файл содержит класс GbookDB наследуемый от интерфейса IGbookDB  savepost.php РНР-код обработки данных для добавления записи в таблицу БД  deletepost.php РНР-код обработки данных для удаления записи из таблицы БД  getall.php вывод списка записей из таблицы БД

38


Модуль 2: Совместное использование PHP 5 и SQLite

Практическая работа Создание гостевой книги: открытие и закрытие соединения с базой данных 1. Откройте в текстовом редакторе файл sqlite\gbook.class.php и выполните следующее задание:

Задание 1 1. Создайте класс GbookDB наследующий интерфейс IGbookDB 2. Создайте константу класса DB_NAME и присвойте ей значение «gbook.db» - имя базы данных 3. Создайте закрытое свойство $_db для хранения объекта соединения с базой данных 4. Создайте конструктор, в котором выполняется подключение к базе данных 5. Создайте деструктор, в котором выполняется закрытие соединения с базой данных 6. Создайте временный объект gbook, экземпляр класса GbookDB 7. Для проверки работоспособности кода запустите данный файл в браузере и убедитесь, что файл «gbook.db» создан 8. Удалите файл «gbook.db»

39


Модуль 2: Совместное использование PHP 5 и SQLite

Выполнение запроса $sql = "SELECT * FROM table"; $db = sqlite_open("test.db"); [$res = ]sqlite_query($db, $sql); sqlite_close($db);

//ООП интерфейс $db = new SQLiteDatabase("test.db"); [$res = ]$db->query($sql); unset($db);

Практическая работа Создание гостевой книги: создание таблицы Откройте в текстовом редакторе файл sqlite\gbook.class.php и выполните следующее задание:

Задание 2 1. Измените конструктор так, чтобы в нём выполнялась проверка, существует ли база данных на следующих условиях:  Если базы данных не существует, создайте ее и выполните SQL-операторы для добавления таблицы (см. файл «gbook.sql»).  В противном случае, выполняйте подключение к существующей базе данных 2. Для проверки работоспособности кода запустите данный файл в браузере и убедитесь, что файл «gbook.db» создан 3. Удалите файл «gbook.db»

40


Модуль 2: Совместное использование PHP 5 и SQLite

Практическая работа Создание гостевой книги: добавление данных в таблицу Откройте в текстовом редакторе файл sqlite\gbook.class.php и выполните следующее задание:

Задание 3 1. 2. 3. 4. 5.

Опишите метод savePost. Смотрите описание метода в интерфейсе IGbookDB Получите данные о текущих дате и времени Получите данные об IP адресе пользователя Сформируйте строку запроса на добавление новой записи Добавьте новую запись в таблицу msgs

Откройте в текстовом редакторе файл sqlite\gbook.php и выполните следующие задания:

Задание 1 1. Подключите файл с описанием класса GbookDB 2. Создайте объект gbook, экземпляр класса GbookDB 3. Создайте переменную errMsg со строковым значением "" (пустая строка)

Задание 2 1. Проверьте, не является ли переменная errMsg пустой строкой? 2. Если НЕТ, то выведите значение переменной errMsg

Задание 3 1. Проверьте, была ли отправлена HTML-форма? 2. Если ДА, то подключите файл с кодом для обработки HTML-формы Откройте в текстовом редакторе файл sqlite\savepost.php и выполните следующие задание:

Задание 1 1. Проверьте, была ли корректным образом отправлена HTML-форма 2. Если НЕТ, то присвойте переменной errMsg строковое значение «Заполните все поля формы!» 3. Если ДА, то отфильтруйте полученные данные и вызовите метод savePost 4. Выполните перезапрос страницы, чтобы избавиться от информации, переданной через форму Запустите файл sqlite/gbook.php в браузере и заполните гостевую книгу записями 41


Модуль 2: Совместное использование PHP 5 и SQLite

Получение ряда результата выборки $result = sqlite_query($db, $sql);

$row = sqlite_fetch_array($result, [TYPE]);

// ООП-интерфейс $result = $db->query($sql); $row = $result->fetch([TYPE]); Константы типов: SQLITE_BOTH // По умолчанию SQLITE_NUM SQLITE_ASSOC

Получение результата выборки в виде массива $result = sqlite_array_query($db, $sql); // ООП-интерфейс $result = $db->arrayQuery($sql);

foreach($result as $row){ echo $row[0];

}

42


Модуль 2: Совместное использование PHP 5 и SQLite

Практическая работа Создание гостевой книги: выборка содержимого таблицы и получение всего результата в виде массива Откройте в текстовом редакторе файл sqkite\gbook.class.php и выполните следующее задание:

Задание 4 1. Опишите метод getAll. Смотрите описание метода в интерфейсе IGbookDB 2. Сформируйте строку запроса на выборку всех данных из таблицы msgs в обратном порядке 3. Получите и верните результат запроса Откройте в текстовом редакторе файл sqlite\gbook.php и выполните следующее задание:

Задание 4 1. Подключите файл с кодом для обработки полученных записей Гостевой книги Откройте в текстовом редакторе файл sqlite\getall.php и выполните следующее задание:

Задание 1 1. Вызовите метод getAll, 2. Результат вызова метода getAll сохраните в переменной. 3. Получите количество записей в Гостевой книге и выведите его в браузер в произвольной форме 4. Используя цикл, выведите в браузер все сообщения, а также информацию об авторе каждого сообщения в произвольной форме 5. После каждого сообщения сформируйте ссылку для удаления этой записи. Информацию об идентификаторе удаляемого сообщения передавайте методом GET

Запустите файл sqlite/gbook.php в браузере

43


Модуль 2: Совместное использование PHP 5 и SQLite

Количество записей и полей в результате запроса Количество записей в результате запроса int sqlite_num_rows($result); // ООП-интерфейс $result->numRows();

Количество полей в результате запроса int sqlite_num_fields($result); // ООП-интерфейс $result->numFields();

Идентификатор новой записи

// Идентификатор новой записи $id = sqlite_last_insert_rowid($db); // ООП-интерфейс $id = $db->lastInsertRowid();

44


Модуль 2: Совместное использование PHP 5 и SQLite

Практическая работа Создание гостевой книги: удаление записи из таблицы Откройте в текстовом редакторе файл sqkite\gbook.class.php и выполните следующее задание:

Задание 5 1. Опишите метод deletePost. Смотрите описание метода в интерфейсе IGbookDB 2. Сформируйте строку запроса на удаление новой записи 3. Удалите запись из таблицы msgs Откройте в текстовом редакторе файл sqlite\gbook.php и выполните следующее задание:

Задание 5 1. Проверьте, был ли запрос методом GET на удаление записи 2. Если ДА, то подключите файл с кодом для удаления записи Откройте в текстовом редакторе файл sqlite\deletepost.php и выполните следующее задание:

Задание 1 1. Отфильтруйте полученные данные 2. Проверьте, корректны ли полученные данные 3. Если НЕТ, то присвойте переменной errMsg строковое значение «Хакер, не ломай мою Гостевую книгу!» 4. Если ДА, то a. вызовите метод deletePost, b. выполните перезапрос страницы, чтобы избавиться от информации, переданной через адресную строку

Запустите файл sqlite/gbook.php в браузере и попробуйте удалить запись

45


Модуль 2: Совместное использование PHP 5 и SQLite

Обработка ошибок $db = @sqlite_open ("test.db",0666,$sqlite_error) or die($sqlite_error); $res = @sqlite_query($db, $sql) or die (sqlite_error_string( sqlite_last_error()));

Исключения SQLite try { ...

throw new SQLiteException(sqlite_error_string ($db->lastError())); ...

} catch (SQLiteException $e) { echo "<p>Произошла ошибка SQLite: ", $e->getMessage(); }

46


Модуль 2: Совместное использование PHP 5 и SQLite

Практическая работа (если останется время) Создание гостевой книги: создание и использование исключений Откройте в текстовом редакторе файл sqlite\gbook.class.php и выполните следующее задание:

Задание 6 1. Опишите в конструкторе, а также в методах getAll, savePost и deletePost блок trycatch 2. Создайте исключения на ошибки при выполнении SQL-запросов Откройте в текстовом редакторе файл sqlite\savepost.class.php и выполните следующее задание:

Задание 2 1. После вызова метода savePost проверьте, был ли запрос успешным? 2. Если НЕТ, то присвойте переменной errMsg строковое значение «Произошла ошибка при добавлении сообщения». Перезапрос страницы выполнять НЕ НАДО Откройте в текстовом редакторе файл sqlite\getall.php и выполните следующее задание:

Задание 2 1. После вызова метода getAll проверьте, был ли запрос успешным? 2. Если НЕТ, то присвойте переменной errMsg строковое значение «Произошла ошибка при выводе записей» Откройте в текстовом редакторе файл sqlite\deletepost.php и выполните следующее задание:

Задание 2 1. После вызова метода deletePost проверьте, был ли запрос успешным? 2. Если НЕТ, то присвойте переменной errMsg строковое значение «Произошла ошибка при удалении сообщения». Перезапрос страницы выполнять НЕ НАДО Запустите файл sqlite/gbook.php в браузере и проверьте корректность работы Гостевой книги

47


Модуль 2: Совместное использование PHP 5 и SQLite

Выводы

Производительность SQLite

Преимущества и ограничения SQLite Особенности безопасности данных SQLite Выполнение основных операций работы с SQLite данными на PHP 5

48


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT Модуль 3


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT Введение в XML Обзор возможностей по работе PHP 5 с технологией XML SAX DOM

Использования DOM при создании гостевой книги SimpleXML Использования SimpleXML при создании гостевой книги XSLT, обзор Преобразование данных на сервере

50


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Введение в XML XML (Extensible Markup Language) Расширяемый язык разметки Предназначен для: хранения структурированных данных обмена информацией между программами

создания на его основе других, более специализированных, языков разметки (OFX, OTP, WSDL, SOAP, VML, XSL, ebXML, CML, XLANG) Цель создания: обеспечение совместимости при передаче структурированных данных между разными системами обработки информации

XML разметка <?xml version="1.0" encoding="windows-1251" ?> <!-- Пример XML разметки --> <catalog> <book id="1"> <title>XML и IE5</title> <author>Алекс Гомер</author> <price currency="RUR">200</price> <exists /> XML декларация </book> Комментарий </catalog>

Элемент документа (корневой элемент) Элемент Атрибут

Текстовые данные

51


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Правила XML Если документ содержит символы, выходящие за рамки ASCII, необходимо указать кодировку XML чувствителен к регистру символов XML-документ состоит из вложенных элементов Элемент состоит из открывающего и закрывающего тегов, а также содержимого: <name>Vasya Pupkin</name> Теги должны быть правильно вложены друг в друга

Все парные теги должны быть закрыты. Возможно формирование пустых элементов – без содержимого: <br/> Должен существовать только один корневой элемент, который содержит все остальные элементы. Пустой документ (без корневого элемента) – недопустим! Элементы могут иметь атрибуты: <book id="1">...</book> Значения атрибутов заключаются в одинарные или двойные кавычки У каждого конкретного элемента не должно быть повторяющихся атрибутов

Корректность и валидность XML -документов Корректные XML-документы (well-formed) Документы, полностью соответствующие правилам оформления XML. Корректность проверяется XML-парсер. Валидные XML-документы (valid) Корректные XML-документы, которые соответствуют заранее определенному набору правил. Валидность проверяется валидатором. Описание структуры документа • DTD – Document Type Definition (определение типа документа) •

52

XML Схемы


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Пример DTD <!ELEMENT catalog (book+)> <!ELEMENT book (title, author+, price, exists?)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT exists (#PCDATA)>

<!ATTLIST price currency CDATA #IMPLIED>

<?xml version="1.0"?> <!DOCTYPE catalog SYSTEM "catalog.dtd">

Пример простой схемы <xs:schema xmlns:xs= <страна xmlns:xsi= "http://www.w3.org/2001/XMLSchema" "http://www.w3.org/2001/XMLSchema> instance" xsi:noNamespaceSchemaLocation= <xs:element name="страна" "country.xsd"> type="Страна"/> <xs:complexType name="Страна"> <xs:sequence> <xs:element name="название" type="xs:string"/>

<название>Франция</название> <население>59.7</население> </страна>

<xs:element name="население" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:schema>

53


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Средства PHP 5 для работы с XML SAX (Simple API for XML) - получение информации из XML-документа DOM (Document Object Model) - чтение, модификация и создание новых XMLдокументов SimpleXML - чтение и модификация XMLдокументов

XSLT (Extensible Stylesheet Language Transformations) - преобразование XMLдокументов в другие форматы

SAX (Simple API for XML) Не является стандартом W3C Официальный сайт: http://www.saxproject.org/ Описывает метод парсинга XML-документов для получения данных из них Создавать и изменять XML-документы с помощью SAX невозможно Основан на событиях

XML-парсеру предоставляется набор собственных функций для обработки различных типов XMLданных Парсер автоматически вызывает эти функции в процессе последовательной обработки XMLдокумента

54


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Функционирование SAX Начало XML-элемента

<catalog> <book>

Начало XML-элемента Начало XML-элемента

<author>L.Argerich</author> </book>

Конец XML-элемента

</catalog>

Текстовый узел Конец XML-элемента

Конец XML-элемента

SAX (Simple API for XML) //Создание парсера $parser = xml_parser_create (["encodig"]); //encoding: ISO-8859-1, UTF-8 и US-ASCII //Определение функций обработки function onStart($xml, $tag, $attributes){} function onEnd($xml, $tag){} function onText($xml, $data){} //Регистрация функций xml_set_element_handler ($parser,"onStart","onEnd"); xml_set_character_data_handler ($parser,"onText"); //Запуск парсера xml_parse($parser, "XML в виде строки");

55


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Лабораторная работа Использование SAX Откройте в текстовом редакторе файл xml\sax.php и выполните следующие задания:

Задание 1 1. 2. 3. 4. 5. 6.

Опишите функцию-обработчик начальных тегов Опишите функцию-обработчик закрывающих тегов Опишите функцию-обработчик текстового содержимого Создайте парсер Зарегистрируйте функцию-обработчики начальных и конечных тегов Зарегистрируйте функцию-обработчик текстового содержимого

Задание 2 1. Запустите парсер и отрисуйте HTML-таблицу

Запустите файл xml/sax.php в браузере

56


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

DOM (Document Object Model) Интерфейс, позволяющий программам управлять содержимым документов XML, а также изменять их структуру Представляет XML-документ в виде дерева узлов Существует спецификация DOM (W3C) $dom = new DOMDocument(); $dom = new DOMDocument("1.0","utf-8");

Узлы XML-документа Catalog

<catalog> <book> <author>Хьюз</author> <title>PHP</title>

Book

Book

</book>

<book>

Author

Title

Author

Title

<author>Григин</author> <title>Справочник</title> </book>

Text

Text

Text

Text

</catalog>

57


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Типы узлов документа Код типа

Тип узла

Описание

Пример

1

ELEMENT

Элемент

<book>…</book>

2

ATTRIBUTE

Атрибут элемента

lang="ru"

3

TEXT

Текстовый узел

Это текст

8

COMMENT

Комментарий

<!– Комментарий -->

9

DOCUMENT

Узел документа

document

10

DocumentType

Декларация типа документа

<!DOCTYPE html PUBLIC “//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/htm l4/loose.dtd”>

Связи между узлами <book> <title>PHP</title>

<author>Zeev Suraski</author> </book> BOOK

TITLE First Child

PHP

58

Previous Sibling Next Sibling

AUTHOR First Child

Zeev Suraski


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Работа с DOM //Загрузка XML-документа $dom->load("catalog.xml"); //Доступ к корневому элементу $root = $dom->documentElement; //Получение типа элемента $type = $root->nodeType; //Получение всех потомков любого элемента $children = $root->childNodes; //Получение текстового содержимого echo $book->textContent; //Обращение к узлам с определенным именем $title = $dom->getElementsByTagName("title"); echo $title->item(0)->textContent;

Лабораторная работа Использование DOM Откройте в текстовом редакторе файл xml\dom.php и выполните следующие задания:

Задание 1 1. Создайте объект DOM 2. Загрузите XML-документ в объект 3. Получите корневой элемент

Задание 2 1. Используя цикл заполните таблицу необходимыми данными

Запустите файл xml/dom.php в браузере

59


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Создание нового XML-элемента //Доступ к корневому элементу $root = $dom->documentElement; //Создание нового XML-элемента

$bookDOM = $dom->createElement("book"); $titleDOM = $dom->createElement("title"); //Создание нового текстового элемента $titleText = $dom->createTextNode("PHP5");

//Присоединение новых элементов к родительским элементам $titleDOM->appendChild($titleText); $bookDOM->appendChild($titleDOM); $root ->appendChild($bookDOM); //Сохранение объекта DOMDocument в файл $dom->save("newcatalog.xml"); //Вариант создания нового XML-элемента с текстом $titleDOM = $dom->createElement("title","PHP 5");

60


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Лабораторная работа Создание гостевой книги: создание xml-документа с помощью DOM Откройте в текстовом редакторе файл xml\gbook\gbook.php и выполните следующие задания:

Задание 1 1. Создайте константу для хранения имени XML-файла 2. Проверьте, была ли отправлена HTML-форма? 3. Если она была отправлена, то a. отфильтруйте полученные данные b. получите данные об IP-адресе пользователя c. получите данные о текущих дате и времени

Задание 2 1. Создайте объект DOMDocument 2. Проверьте, существует ли xml-документ с данными 3. Если существует, загрузите его в созданный объект и получите корневой элемент 4. Если не существует, создайте корневой элемент «users» и привяжите его к объекту

Задание 3 1. Cоздайте новый XML-элемент «user» для очередного заказа 2. Cоздайте XML-элементы для всех данных гостевой книги: name, email, msg, IP, datetime 3. Cоздайте текстовые узлы для всех указанных элементов 4. Привяжите текстовые узлы к соответствующим XML-элементам 5. Привяжите XML-элементы с данными заказа к XML-элементу «user» 6. Привяжите XML-элемент «user» к корневому элементу «users» 7. Сохраните файл 8. Перезапросите страницу для избавления от посланных данных

Запустите файл xml/gbook/gbook.php в браузере. Добавьте записи в гостевую книгу.

61


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

SimpleXML, приципы работы //Конвертируем XML-файл в объект $sxml = simplexml_load_file("catalog.xml"); //Вывод названия первой книги echo $sxml->book[0]->title; //Изменение автора второй книги $sxml->book[1]->author = "Вася Пупкин"; //Конвертируем объект в XML $xmlContent = $sxml->asXML(); $sxml = <<<LABEL <book> <title>PHP</title> <author>Zeev Suraski</author> </book> LABEL;

//Конвертируем XML-строку в объект $sxml = simplexml_load_string($sxml);

Лабораторная работа Использование SimpleXML Откройте в текстовом редакторе файл xml\simplexml.php и выполните следующие задания:

Задание 1 1. Создайте объект и загрузите в него документ

Задание 2 2. Заполните HTML-таблицу необходимыми данными

Запустите файл xml/simplexml.php в браузере

62


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Лабораторная работа Создание гостевой книги: чтение xml-документа с помощью SimpleXML Откройте в текстовом редакторе файл xml\gbook\gbook.php и выполните следующее задание:

Задание 4 1. Создайте объект SimpleXML и загрузите в него XML-документ 2. Выведите в браузер все сообщения, а также информацию об авторе каждого сообщения в произвольной форме в обратном порядке

Запустите файл xml/gbook/gbook.php в браузере

63


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Применение файла CSS к XML-документу на стороне клиента <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="books.css"?>

XSL/T (Extensible Stylesheet Language /Transformations) Стилевая технология, предназначенная для трансформации XML-документов в другие форматы Таблицы стилей XSL создаются по правилам XML-документов Таблицы стилей XSL состоят из набора шаблонов XSLT-преобразования можно проводить на стороне сервера (средствами PHP) Такие преобразования поддерживаются только если подключен модуль XSL (php_xsl.dll)

64


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Применение файла XSL к XML-документу на стороне клиента <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="books.xsl"?>

Пример XSL-документа <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/"> ... <xsl:apply-templates select="/catalog/book" /> ... </xsl:template> <xsl:template match="book[price < 200]"> ... <xsl:apply-templates select="./*" /> ... </xsl:template> <xsl:template match="book/*"> ... <xsl:value-of select="." /> ... </xsl:template> </xsl:stylesheet>

65


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

XSLT в действии Исходный XML-документ

XSLT (XHTML)

Документ XHTML

XSLT (FB2)

Документ FB2

XSLT (DOCX)

Документ MS Word

Применение таблицы XSL к XML-документу на стороне сервера //Загрузка исходного XML-документа $xml = new DOMDocument(); $xml->load("catalog.xml"); //Загрузка таблицы стилей XSL $xsl = new DOMDocument(); $xsl->load("catalog.xsl");

//Создание XSLT-процессора и загрузка в него стилевой таблицы $processor = new XSLTProcessor(); $processor->importStylesheet($xsl); //Выполнение трансформации и получение результатов $html = $processor->transformToXml($xml); echo $html;

66


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

Выводы

Возможности PHP 5 по работе с технологией XML Simple API for XML

DOM SimpleXML XSL/T Преобразование данных на сервере

67


Модуль 3: PHP 5 и XML. Расширения SAX, DOM, SimpleXML, XSLT

68


Модуль 4: PHP 5 и XML Web Services. SOAP

PHP 5 и XML Web Services. SOAP Модуль 4


Модуль 4: PHP 5 и XML Web Services. SOAP

PHP 5 и XML Web Services. SOAP

Введение в XML Web Servises

Работа с XML Web Servises под PHP 5 Расширение SOAP Использование расширения SOAP:

 сервер  клиент  WSDL  обработка исключений

70


Модуль 4: PHP 5 и XML Web Services. SOAP

Web-сервисы

Программы, доступ к которым осуществляется по протоколу HTTP, а обмен данными происходит в формате XML HTTP-запрос

XML-запрос по HTTP

HTTP-ответ

Клиент

XML-ответ по HTTP

HTTP-сервер: клиент Web-службы

HTTP-сервер: сервер Web-службы

Введение в web-сервисы Достоинства Web-служб  Независимость от платформы  Простота разработки и отладки  Использование открытых протоколов и стандартов Ресурсы с web-службами  http://www.xmethods.net

Web Service Description Language (WSDL)  Создан для описания услуг, предоставляемых веб-сервисом, и способов обращения к ним  Документы WSDL являются XML-документами

71


Модуль 4: PHP 5 и XML Web Services. SOAP

Работа с Web-сервисами на PHP 5 Расширение SOAP (Simple Object Access Protocol)

Для функционирования необходимо подключить модуль php_soap.dll в настройках PHP Класс SoapClient – создание SOAP-клиента Класс SoapServer – создание SOAP-сервера Класс SoapFault – информация об ошибках

Использование класса SoapServer class StockService{ function getStock($param){...} } //Отключение кэширование WSDL-документа ini_set("soap.wsdl_cache_enabled","0"); //Создание SOAP-сервера $server = new SoapServer("stock.wsdl"); //Добавление функции как метод SOAP-сервера $server->addFunction("getStock"); //Или регистрация класса-обработчика на SOAPсервере $server->setClass("StockService"); //Обработка SOAP-запроса $server->handle();

72


Модуль 4: PHP 5 и XML Web Services. SOAP

Использование класса SoapClient //Создание SOAP-клиента $client = new SoapClient("http://site.ru/stock.wsdl"); //Получение информации о методах и параметрах var_dump($client->__getFunctions()); //Вызов метода SOAP-сервера и получение результата $result = $client->getStock("3"); echo "Результат: ", $result;

Использование класса SoapFault Серверная часть ... throw new SoapFault("Server", "Несуществующий id товара"); ...

Клиентская часть try { $client = new SoapClient("stock.wsdl"); $result = $client->getStock("7"); echo "Текущий запас: ", $result; } catch (SoapFault $exception) { echo $exception->getMessage(); }

73


Модуль 4: PHP 5 и XML Web Services. SOAP

Выводы

XML Web Servises в повседневной жизни XML Web Servises и PHP 5 Использование расширения SOAP:  сервер  клиент  WSDL  обработка исключений

74


Модуль 5: Работа с графикой

Работа с графикой Модуль 5


Модуль 5: Работа с графикой

Работа с графикой

Вопросы генерации графики на PHP 5 Использование расширения GD2 Базовые функции для работы с графикой

76


Модуль 5: Работа с графикой

Работа с графикой на PHP 5 С помощью PHP можно генерировать изображения «на лету» Библиотека GD2 (http://www.boutell.com/gd/) Настройки PHP - модуль php_gd2.dll Формат изображения

Версии библиотеки GD

GIF

< gd-1.6 > gd-2.0.28

JPEG

Все версии

PNG

> gd-1.6

<img src="create_image.php">

77


Модуль 5: Работа с графикой

Создание и генерация изображения // Создание изображения (256 цветов) $img = imageCreate(500, 300); // Создание изображения (17 млн. цветов) $img = imageCreateTrueColor(500, 300); // Генерация JPEG-изображения header("Content-type: image/jpeg"); imageJpeg($img[,"filename"][,quality]); // Генерация GIF-изображения header("Content-type: image/gif"); imageGif ($img[,"filename"]);

// Генерация PNG-изображения header("Content-type: image/png"); imagePng($img[,"filename"]);

Рисование // Сглаживание (antialiasing) imageAntiAlias($img, true); // Определение цвета $color = imageColorAllocate($img, 255, 0, 0); // Отрисовка линии imageLine($img, 20, 20, 80, 280, $color); // Отрисовка прямоугольника imageRectangle($img, 20, 20, 80, 280, $color); imageFilledRectangle ($img, 20, 20, 80, 280, $color); // Отрисовка многоугольника $points = array(0,0,100,200,300,200); imagePolygon($img, $points, 3, $color); imageFilledPolygon ($img, $points, 3, $color);

78


Модуль 5: Работа с графикой

Рисование (продолжение) // Отрисовка эллипса (или окружности) imageEllipse ($image, 200, 150, 300, 200, $color); imageFilledEllipse ($image, 200, 150, 300, 200, $color); // Отрисовка сектора эллипса imageArc ($image, 200, 150, 300, 200, 0, 40, $color); imagefilledarc ($image, 200, 150, 300, 200, 0, 40, $color, IMG_ARC_PIE); Константы для imageFilledArc: IMG_ARC_PIE IMG_ARC_CHORD, IMG_ARC_NOFILL, IMG_ARC_EDGED

Рисование (окончание) // Отрисовка строки текста imageString ($image, 3, 150, 300, "Hello!", $color); // Отрисовка строки текста с использованием TrueType-шрифтов imageTtfText($img, 30, 10, 300, 150, $color, "arial.ttf", "Hello!");

// Создание нового изображения на базе существующего $img = imageCreateFromJPEG("image.jpg"); $img = imageCreateFromGIF("image.gif"); $img = imageCreateFromPNG("image.png");

79


Модуль 5: Работа с графикой

Лабораторная работа Создание и использование CAPTCHA Откройте в текстовом редакторе файл gd\noise-picture.php и выполните следующие задания:

Задание 1 1. Запустите сессию 2. Создайте переменную nChars (количество выводимых на картинке символов) и присвойте ей произвольное значение(рекомендуемое: 5) 3. Сгенерируйте случайную строку длиной nChars символов 4. Создайте сессионную переменную randStr и присвойте ей сгенерированную строку

Задание 2 1. 2. 3. 4.

Создайте изображение на основе файла images/noise.jpg Создайте цвет для рисования Включите сглаживание Задайте начальные координаты x и y для отрисовки строки (рекомендуемые значения: 20 и 30) 5. Используя цикл for отрисуйте посимвольно сгенерированную в Задании 1 строку на созданном изображении 6. Для каждого символа используйте случайные значение размера и угла наклона 7. Отдайте полученный результат как jpeg-изображение с 10% сжатием Откройте в текстовом редакторе файл gd\registration.php и выполните следующие задания:

Задание 1 1. 2. 3. 4.

Запустите сессию Создайте переменную result со значением "пустая строка" ("") Проверьте, была ли отправлена форма Проверьте, существует ли сессионная переменная randStr o Если переменная randStr существует и её значение равно значению введённому пользователем, присвойте переменной result значение "Правильно" o Если переменная randStr существует и её значение не равно значению введённому пользователем, присвойте переменной result значение "НЕ правильно" o Если переменная randStr не существует, присвойте переменной result значение «ВКЛЮЧИ ГРАФИКУ!»

Запустите файл gd/registration.php в браузере

80


Модуль 5: Работа с графикой

Домашняя работа Использование XML, XML Web Services и графических функций По адресу http://www.cbr.ru/scripts/XML_dynamic.asp? date_req1=02/03/2008&date_req2=02/04/2008&VAL_NM_RQ=R01235 находится XML-документ описывающий движение валюты «VAL_NM_RQ» за период с «date_req1» по «date_req2», где  VAL_NM_RQ – код валюты ЦБ РФ. Например, R01235  date_req1 – начальная дата движения. Например, 02/03/2009  date_req1 – конечная дата движения. Например, 02/04/2009 Коды валют ЦБ РФ можно получить, запросив по адресу http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/04/2008 XML-документ, содержащий курсы валют за указанную дату.

Задание 1. Зачитаийте полученный XML-документ 2. На основе полученных данных, постройте график движения выбранной валюты за выбранный период 3. Создайте веб-сервис, который принимая код валюты и временной период возвращает график в виде изображения в формате «png» 4. Продайте свой веб-сервис  5. На полученные деньги оплатите курс «РНР. Уровень 4» 

81


Модуль 5: Работа с графикой

Выводы

Генерация графики под PHP 5 Использование расширения GD2 Базовые функции для работы с графикой

82


Модуль 6: Сетевое программирование

Сетевое программирование Модуль 6


Модуль 6: Сетевое программирование

Сетевое программирование

Сетевые функции Соединение с удаленными узлами через сокеты

84


Модуль 6: Сетевое программирование

Введение в сокеты Сокеты (sockets) позволяют осуществить доступ к используемым сетевым протоколам Варианты использования: Подключение к службе, для которой отсутствует соответствующая обвертка (file wrapper) (Напр., memcached caching server) Осуществление действий, невозможных при использовании потоков, но возможных при использовании сетевых протоколов (Напр., отсылка информации методом POST)

Пример сокетного соединения $addr = "www.specialist.ru"; $socket = @fsockopen($addr, 80, $sock_errno, $sock_errmsg, 30); if($socket){ $request = "HEAD / HTTP/1.0\r\n" . "Host: $addr\r\n\r\n"; fwrite($socket, $request); while (!feof($socket)){ echo fgets($socket, 4096); } }else{ echo "Ошибка $sock_errno: $sock_errmsg"; }

85


Модуль 6: Сетевое программирование

Пример работы с сокетом $address = "www.specialist.ru"; $port = 4001; $msg = "Тестируем сокет"; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $return = socket_bind($socket, $address, $port); $return = socket_listen($socket, 10); $sd = socket_accept($socket); socket_write($sd, $msg, strlen($msg)); $buffer = socket_read($sd, 1024); socket_close($socket); socket_strerror(socket_last_error());

Сетевые функции $hostname = gethostbyaddr('127.0.0.1'); $ip = gethostbyname('www.example.com');

$hosts = gethostbynamel('www.example.com'); $port = getservbyname('http', 'tcp'); $serv = getservbyport(80, 'tcp'); echo exec('whoami');

86


Модуль 6: Сетевое программирование

Выводы

Сетевые функции Соединение с удаленными узлами через сокеты

87


Модуль 6: Сетевое программирование

88


Модуль 6: Сетевое программирование

Что дальше?

Основы PHP

Создание PHP сайтов

Web-мастеринг. Серверное web-программирование

Профессиональное программирование на PHP XML и XSLT. Современные технологии обработки данных для Web и Office 2007

Сервер mySQL

Больше курсов – хороших и разных

HTML и CSS (основы веб-дизайна / веб-мастеринга) Основа основ — это должен знать каждый! На курсе рассматриваются стандарты языка HTML 4, CSS 2, их различия и аспекты совместимости с различными браузерами

JavaScript и DHTML Полное погружение в мир сценариев JavaScript.

AJAX. Разработка web-приложений для Web 2.0 Что означает модное слово AJAX? Подгрузка данных с сервера без перезагрузки страниц в браузере — зачем это нужно и как это сделать?

Веб-маркетинг, продвижение и поисковая оптимизация сайтов Хотите видеть свой сайт на первых позициях в результате поисковых запросов? Хотите увеличить посещаемость? Что принесѐт пользу, а что — вред? Всѐ о SEO на этом курсе.

Английский язык для IT специалистов. Часть 1 Вы IT специалист. Вы мастер своего дела. Мир всемирной паутины – у Ваших рук!Однако, он гораздо шире, чем его русскоязычное пространство, и чтобы это пространствопокорить – английский нужен, как ни крути!

89


Модуль 6: Сетевое программирование

У вас есть вопросы? Напишите E-mail тренеру… Конференция Клуб Выпускников: http://forum.specialist.ru/Discussions.aspx?id=9

Семинары и консультации http://www.specialist.ru/Events/Seminars

S N A P I T

Get the free app for your phone at http://gettag.mobi

90


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.