
- •В.С. Романчик
- •Глава 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. Популярные веб-приложения и фреймворки
- •Фреймворки
Магические методы
Функции, __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state , __clone , имена которых начинаются с символа “_“ , являются магическими в PHP классах и имеют особую функциональность.
Методы доступа к свойствам объектов __get($name) и __set($name,$value) позволяют легко проводить динамическое назначение свойств объектам. В качестве параметров этим методам передаются имена свойств класса.
Метод __set() также получает и значение, которое устанавливается для свойства. Методы __get() и __set() вызываются только в том случае, если требуемого свойства вообще нет в классе.
<?php
class MyClass {
private $properties;
function __set($name, $value) {
echo "задание нового свойства $name = $value";
$this->properties[$name]=$value;
}
function __get($name) {
echo "чтение значения свойства ", $name;
return $this->properties[$name];
}
}
$obj = new MyClass;
$obj->property = 1; // Выводит "задание нового свойства property=1"
$a = $obj->property; // Выводит "чтение значения свойства property"
echo $a; // выводит 1;
?>
При вызове в PHP 5 несуществующего метода объекта автоматически вызывается специальный метод __call().
<?php
class MyClass {
function __call($name, $params) {
echo "Вызван метод $name с параметром $params[0]";
}
}
$obj = new MyClass;
echo $obj->method(1); // Выводит "Вызван метод method
// с параметром 1"
?>
В качестве параметров __call() принимает имя вызываемого метода и передаваемые этому методу параметры.
В PHP 5 псевдо-константа __METHOD__ возвращает имя класса и вызываемый метод.
<?php
class MyClass {
public function myMethod() {
echo "вызов метода ", __METHOD__;
}
}
$obj = new MyClass;
$obj->myMethod();//Выводит "вызов метода MyClass::myMethod"
function myFunction() {
echo "вызов функции ", __METHOD__;
}
myFunction(); // Выводит "вызов функции myFunction"
?>
При обращении к функции вне класса __METHOD__ возвращает только имя функции.
В PHP 5 введен еще один специальный метод класса - __toString().
<?php
class MyClass {
function __toString() {
return "вызван метод __toString()";
}
}
$obj = new MyClass;
echo $obj; // Выводит "вызван метод __toString()"
?>
Метод класса __toString() позволяет выполнить перегрузку преобразования объекта в строку.
Обработка ошибок
Начиная с PHP 5 введена современная схема обработки исключений. Конструкция try/catch/throw позволит весь код обработки ошибок локализовать в одном месте сценария.
<?php
try {
$fp = @fopen("file.txt", "w");
if (!$fp) throw new Exception("Невозможно открыть файл!");
// Запись данных в файл
fclose($fp); }
catch (Exception $exception) {
echo "Ошибка в строке ", $exception->getLine();
echo $exception->getMessage(); // Выводит "Невозможно
// открыть файл"
}
?>
В конструкции можно использовать несколько блоков catch. Также возможно создание собственных классов исключений, производных от встроенного класса Exception.
Ошибки php и директива error_reporting
Библиотека PHP может генерировать ряд ошибок, не относящихся к уровню исключений. Для обработки критических для всей программы ошибок можно использовать инструкцию or die(). В скобках указывается сообщение об ошибке или функция, которая должна быть вызвана в случае ошибки. Например
$f=fopen(“fff.dat”,”r”) or die(“Error”);
Стандартно рассматриваются три типа ошибок в скриптах: синтаксические, логические и ошибки времени выполнения. С помощью оператора @ можно подавить вывод сообщения о любой ошибке в выражении. Например $a=@(1/0); приведет к значению $a=false;
Уровень обработки сообщений об ошибках устанавливается как значение директивы error_reporting в файле php.ini. В PHP установлено значение по умолчанию error_reporting = E_ALL & ~E_NOTICE, что означает отображение всех ошибок и предупреждений, за исключением логических ошибок, которые имеют уровень E_NOTICE.
В PHP обрабатываются три уровня ошибок: информационные ошибки, ошибки с возможностью действия (предупреждения) и неустранимые (фатальные) ошибки.
Информационные ошибки: E_STRICT, E_NOTICE, E_USER_NOTICE – компилятор столкнулся с логической проблемой, которая может привести к ошибке выполнения.
Ошибки с возможностью действия (предупреждения) означают, что возможно придется завершить работу с выдачей сообщения. Ошибка - E_WARNING предупреждение времени выполнения связанное с возможностью выполнения функции или блока. Аналогично E_USER_WARNING генерируемое пользователем предупреждение. E_COMPILE_WARNING предупреждения времени компиляции.
Неустранимые (фатальные) ошибки возникают тогда, когда выполнение или загрузка программы невозможны. E_ERROR фатальные ошибки времени выполнения. E_PARSE ошибки разбора времени компиляции. E_COMPILE_ERROR фатальные ошибки времени компиляции. E_CORE_ERROR фатальные ошибки при начальном старте PHP.
Приведем значения нескольких констант, определяющих вывод типов ошибок и предупреждений: 1 - E_ERROR , 2 - E_WARNING, 4 - E_PARSE и т.д
Файл php.ini может быть недоступен Параметр error_reporting в этом случае может быть установлен функцией error_reporting() в скрипте. Параметр display_error=off отключает вывод сообщений об ошибках на экран. Параметр log_errors=on включает регистрацию ошибок в журнал ошибок error_log.
Любой скрипт может "упасть" при наступлении "критичных" условий. Чтобы свести такой риск к минимуму всегда нужно:
проверять результаты вызова функций: обязательно убедитесь, что возвращаемые данные находятся в интервале допустимых значений;
проверять результаты системных вызовов: Хороший пример - проверка ответа системы при вызове функции sql_connect(). Стоит проверить этот ответ и убедиться, что подключение к БД действительно имело место. Если этого не сделать, то все запросы к БД могут не состояться, а некоторые данные могут быть утеряны.
<?php
$conn = @sql_connect ($host, $user, $pass);
if (!$conn) {
die (sprintf ("Ошибка [%d]: %s", sql_errno (), sql_error ()));
}
?>
Установка уровня error_reporting в файле php.ini на E_ALL: уровень error_reporting должно быть выставлено на наивысший уровень. При другой конфигурации, многие ошибки типа "неверное регулярное выражение", "недопустимое значение" могут ускользнуть.
Файлы
Файлы могут быть текстовыми, содержащими строки переменной длины и бинарными, представляющими последовательность байт. В языке PHP имеются различные средства для реализации работы с файлами.
Для того, чтобы вставить другие файлы в текущий текстовый файл PHP, может использоваться директива include filename. Строка filename содержит имя включаемого файла.
При работе с файлами в PHP используются три действия: 1) открытие файла для чтения или записи, 2) чтения или записи, 3) закрытие файла.
Открытие файла:
int fopen (string filename, string mode [, int use_include_path]). Функция осуществляет открытие локального или удаленного файла с именем, указанным в filename, и возвращает его дескриптор (номер). Режим открытия файла mode, может принимать следующие значения:
"r" - файл открывается только для чтения. "r+" - открывается на чтение и на запись. Текущий указатель файла устанавливается в его начало.
"w" - Файл открывается только для перезаписи. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется, счётчик длины файла устанавливается равным 0. Если файл с указанным именем не существует, функция пытается его создать. "w+" - Файл открывается на чтение и на запись. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется.
"a" - Файл открывается на добавление (запись). Указатель файла помещается в конец файла. Если файл с указанным именем не существует, функция пытается его создать. "a+" - Файл открывается на чтение и на запись. Вот несколько примеров открытия файлов с помощью fopen()
$fp = fopen ("/home/a/bases.dat", "r");
$fp = fopen ("/home_dir/client/count.txt", "w+");
$fp = fopen ("http://www.yahoo.com/pp.txt", "r");
В случае успешного завершения функция fopen() возвращает "ссылку" на открытый файл, а в случае ошибки эта функция возвращает булевское значение false.
В РНР имеется возможность удаленного открытия файлов путем указания URL-адреса в качестве параметра $filename функции fopen (). Осуществлять запись в такие файлы, невозможно, но зато можно их читать.
URL, содержащие недопустимые символы (например, пробельные символы в имени файла), необходимо кодировать перед их использованием с помощью функции urlencode (). Функция urlencode () принимает единственный параметр (URL, подлежащий кодированию) и возвращает закодированный URL. Использование функции fореn()
<?php
/* Открыть файл для чтения */
$fr = fopen("myfile.txt", 'r');
/* Открыть бинарный файл для чтения/добавления */
$fr = fopen("myfile.dat", 'ba+');
/* Открыть файл для чтения/записи (искать файл в пути,
заданном директивой include_path)*/
$fr = fopen("code.php", 'w+', true);
/* Открыть файл index.php, для чтения по протоколу HTTP */
$fr = fopen("http://www.php.net/index.php", 'r');
/* Открыть файл index.php, для чтения по протоколу FTP */
$fr = fopen("ftp://ftp.php.net/index.php", 'r');
/*Закодировать URL, затем открыть для чтения по протоколу HTTP */
$url = "http://www.php.net/this is my invalid URL.php";
$url = urlencode($url);
$fr = fopen($url, 'r');
?>
Закрытие файла: bool fclose ($fp).
Для работы с текстовыми файлами наиболее часто используются функции: fgets (), которая извлекает строку из файла, и fputs (), которая записывает строку в файл.
Функция считывания строки string fgets ( $fp, $length) возвращает строку длиной до length-1 байт, считанную из файла $fp. Операция чтения завершается после загрузки length-1 символов, либо после обнаружения символа конца строки, либо при обнаружении признака конца файла. Вот пример построчного вывода на экран, содержимого файла:
<? //pr415
$fp = fopen ("pr415.php", "r");
while (!feof ($fp)) {
$stroka = fgets ($fp, 80);
echo $stroka."<BR>";
}
fclose($fp);
?>
Загрузка строки с пропуском HTML-тегов выполняется функцией: string fgetss ($fp, $length [, string allowable_tags]). Функция работает идентично fgets(), однако считанной строки удаляются все HTML-теги, которые в ней присутствуют. Есть возможность использовать необязательный третий аргумент, для указания разрешенных тегов, которые удалены не будут.
Альтернативой fgets () является функция fscanf (). Синтаксис функции fscanf () показан ниже:
fscanf ($filename, $format , $var_one [, $var_two ...]]])
где $filename — входной поток, $format задает шаблон для чтения, а $var_one, $var_two представляют собой переменные, в которых сохраняются разобранные фрагменты данных (эти параметры необходимо передавать по ссылке). В случае успешного завершения ввода fscanf () возвращает количество разобранных элементов, а случае ошибки возвращает значение false. Запись форматированных данных в файл выполняет функция
fprintf ($filename, $format , $var_one [, $var_two ...]]]):
<?php if (!($fp = fopen('date.txt', 'w'))) { return; } fprintf($fp, "%04d-%02d-%02d", $year, $month, $day);
?>
Допустимые символы форматирования функции fscanf () и fprintf()
%b Двоичное число.
%с Одиночный символ.
%d Десятичное число со знаком.
%u Десятичное число без знака.
%f Число с плавающей запятой.
%о Восьмеричное число.
%s Строка.
%x Шестнадцатиричное число.
Функция fputs () служит для записи строки (или любых других данных) в указанный поток и имеет следующий синтаксис: fputs($filename, $data [, int $length]), где $filename представляет выходной поток, $data содержит записываемые данные, а необязательный параметр $length задает размер фактически записываемых данных.