- •Содержание:
- •Математические функции : Функции округления
- •Математические функции : Случайные числа
- •Математические функции : Минимум и максимум
- •Математические функции : Степенные функции
- •Математические функции : Тригонометрия
- •Математические функции : Функции повышенной точности BCMath
- •Математические функции : Функции GMP. Арифметика
- •Математические функции : Функции GMP. Математика
- •Математические функции : Функции GMP
- •Математические функции : Функции GMP. Значения функции GMP
- •Математические функции : Функции GMP. Бинарные операции
- •Работа с массивами : Создание массива
- •Работа с массивами : Сортировка массивов
- •Работа с массивами : Курсор массива
- •Работа с массивами : Ключи и значения
- •Работа с массивами : Комплексная замена в строке
- •Работа с массивами : Работа с несколькими массивами
- •Работа с массивами : Получение и удаление части массива
- •Работа с массивами : Вставка/удаление элементов
- •Работа с массивами : Переменные и массивы
- •Строковые функции : Функции отрезания пробелов
- •Строковые функции : Поиск в тексте
- •Строковые функции : Функции сравнения
- •Строковые функции : Форматирование и вывод строк
- •Строковые функции : Составление/разбиение строк
- •Строковые функции : Работа с блоками текста
- •Строковые функции : Функции для преобразования символов
- •Строковые функции : Функции изменения регистра
- •Строковые функции : Установка локали (локальных настроек)
- •Строковые функции : Преобразование кодировок
- •Строковые функции : Функции форматных преобразований
- •Строковые функции : Функции URL
- •Строковые функции : Работа с бинарными данными
- •Строковые функции : Строковые суммы и хеш-функции
- •Символические ссылки. Жесткие ссылки
- •Функции даты и времени
- •Логические функции определения типа переменной
- •Функции переменных
- •Функции для работы с функциями
- •Календарные функции
- •Работа с файлами : Открытие файла
- •Работа с файлами : Закрытие файла
- •Работа с файлами : Чтение и запись
- •Работа с файлами : Положение указателя текущей позиции
- •Работа с файлами : Функции для определения типов файлов
- •Работа с файлами : Определение параметров файла
- •Работа с файлами : Функции для работы с именами файлов
- •Работа с файлами : Функции манипулирования целыми файлами
- •Работа с файлами : Другие функции
- •Функции для работы с каталогами : Манипулирование каталогами
- •Функции для работы с каталогами : Работа с записями
- •FTP : Работа с FTP-сервером
- •FTP : Работа файлами
- •Функции IMAP
- •Функции SNMP
- •Функции Vmailmgr
- •Сетевые функции
- •Отслеживание и обработка ошибок : Введение
- •Отслеживание и обработка ошибок : Функции обработки ошибок
- •Управление сессиями : Имя группы сессии
- •Управление сессиями : Идентификатор сессии
- •Управление сессиями : Другие функции
- •Управление сессиями : Обзор обработчиков
- •Управление сессиями : Про сессии и Cookies
- •Работа с WWW : Установка заголовков ответа
- •Работа с WWW : Получение заголовков запроса
- •Работа с WWW : Работа с Cookies
- •Работа с WWW : SSI и функция virtual()
- •Управление выводом : Введение
- •Управление выводом : Функции управления выводом
- •Управление исполнением сценария PHP : Дополнительные функции
- •Почтовые функции
- •Функции запуска программ
- •Функции динамической загрузки
- •Информационные функции
- •База данных MySQL : Работа с базами данных
- •Базы данных MySQL : Обработка результатов запроса
- •PDF-документы : Введение
- •PDF-документы : Открытие документа
- •PDF-документы : Работа с текстом
- •PDF-документы : Установка масштаба и системы координат
- •PDF-документы : Черчение и заполнение фигур
- •PDF-документы : Размещение рисунков
- •PDF-документы : Стиль документа
•MX (по умолчанию)
•NS
•SOA
•PTR
•CNAME
•ANY
Аргумент host может указываться строкой в формате IP с разделением точками, либо быть именем хоста.
getmxrr
Производит получение MX записи для интернет-хоста.
Синтаксис :
int getmxrr(string hostname, array mxhosts [, array weight]);
Функция getmxrr() инициирует поиск в базе данных DNS записи MX (почтовый сервер домена) для хоста hostname.
Если запись найдена, возвращает true, если нет - то false.
Список записей MX заносится в массив mxhosts. Если указан массив weight, он заполняется дополнительной информацией о записях.
Отслеживание и обработка ошибок : Введение
PHP имеет следующие типы ошибок и предупреждений:
|
|
|
|
|
|
|
Значение |
|
Константа |
|
Описание |
|
1 |
|
E_ERROR |
|
Фатальная ошибка времени исполнения. |
|
|
|
|
|
|
|
2 |
|
E_WARNING |
|
Предупреждение времени исполнения. |
|
|
|
|
|
|
|
4 |
|
E_PARSE |
|
Сообщение интерпретации времени |
|
|
|
исполнения. |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
E_NOTICE |
|
Простое сообщение времени исполнения. |
|
|
|
|
|
|
|
16 |
|
E_CORE_ERROR |
|
Фатальная ошибка при инициализации PHP. |
|
|
|
|
|
|
|
32 |
|
E_CORE_WARNING |
|
Предупреждение инициализации. |
|
|
|
|
|
|
|
64 |
|
E_COMPILE_ERROR |
|
Фатальная ошибка компиляции. |
|
|
|
|
||
|
128 |
|
E_COMPILE_WARNING Предупреждение компиляции. |
||
|
|
|
|
|
|
|
256 |
|
E_USER_ERROR |
|
Ошибки, определяемые пользователем. |
|
|
|
|
|
|
|
512 |
|
E_USER_WARNING |
|
Предупреждения, определяемые |
|
|
|
пользователем. |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
1024 |
|
E_USER_NOTICE |
|
Сообщения, определяемые пользователем. |
|
|
|
|
|
|
|
2047 |
|
E_ALL |
|
Все перечисленные сообщения. |
|
|
|
|
|
|
Указанные значения в виде чисел или констант можно комбинировать, формируя битовую маску ошибок, о которых необходимо сообщать в ходе исполнения сценария. Для комбинирования используются битовые операторы, но в конфигурационном файле php.ini распознаются только "|", "~", "!" и "&".
В PHP 4 по умолчанию разрешены сообщения вида E_ALL & ~E_NOTICE, то есть
сообщаться должно все, кроме обычных сообщений. Можно переопределить эту установку параметром файла конфигурации error_reporting() (ее также можно указывать в файлах конфигурации сервера Apache).
Если при вызове функции перед ее именем указать символ "@", то в случае возникновения ошибки в этой функции сообщение о нем выдаваться не будет.
В настоящее время оператор игнорирования ошибок блокирует даже выдачу сообщений о критических ошибках, при возникновении которых сценарий досрочно завершается.
Если разрешен параметр конфигурации track_errors, то сообщение об ошибке сохраняется в глобальной переменной $php_errormsg.
<?
// определенный пользователем обработчик ошибок
function userErrorHandler($errno,$errmsg,$filename,$linenum,$vars) { // время возникновения ошибки
$dt=date("Y-m-d H:i:s (T)"); $errortype = array(
1=> "Error",
2=> "Warning",
4 => "Parsing Error",
8 => "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "User Error",
512 => "User Warning",
1024 => "User Notice" );
$err.="время ($dt), номер ошибки ($errno), "; $err.="тип ошибки (".$errortype[$errno]."): "; $err.="\"$errmsg\".файл \"$filename\", строка ("; $err.=$linenum.")\n";
$user_errors=array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); if(in_array($errno, $user_errors))
//выдать сообщение для ошибок пользователя echo $err;
//сохранить событие ошибки в системном журнале error_log($err, 3, "/usr/local/php4/error.log");
}
//установить уровень контроля ошибок и обработчик error_reporting(0); // не выводить сообщения PHP $old_error_handler=set_error_handler("userErrorHAndler");
//неопределенная константа вызывает предупреждение
$t=_NOT_DEFINED_CONSTANT;
trigger_error("Моя ошибка", E_USER_ERROR); trigger_error("Мое предупреждение", E_USER_WARNING);
?>
Отслеживание и обработка ошибок : Функции обработки ошибок
error_log
Посылка сообщения об ошибке.
Синтаксис :
int error_log(string message, int message_type [, string destination [, string extra_headers]])
Сообщение, посылаемое этой функцией, может быть направлено в журнал системных сообщений web-сервера, прот TCP или в файл.
В первом аргументе message указывается само содержание сообщения. Во втором аргументе message_type - куда оно должно быть направлено.
Назначение обозначается следующими значениями:
•0 - Сообщение заносится в системный журнал событий (файл) согласно установке параметра конфигурации error_log.
•1 - Сообщение отправляется по электронной почте, по адресу, указанному в аргументе destination. Это единственный тип сообщения, использующий четвертый параметр extra_headers, в котором можно указать дополнительные заголовки (как в функции mail()).
•2 - Сообщение посылается через подключение отладки. Это возможно только в случае, если параметр удаленной отладки был разрешен в файле конфигурации. Для этого также должен быть определен адрес хоста (имя или его IP адрес) и порт сокета, который будет принимать сообщения отладки. Это можно указать в аргументе destination или параметрах конфигурации.
•3 - message добавляется в конец файла destination.
if(!Ora_London($username, $password)) { error_log("Сервер Oracle недоступен!", 0);
};
if(!($foo = allocate_new_foo()) {
error_log("Нельзя выделить FOO!", 1, "operator@mydomain.ru");
}
// other ways of calling error_log(): error_log("У нас ошибка!", 2, "127.0.0.1:7000"); error_log("У нас ошибка!", 2, "localhost");
error_log("У нас ошибка!", 3, "/var/tmp/my-errors.log");
error_reporting
Установка видов сообщаемых ошибок.
Синтаксис :
int error_reporting([int level])
Функция error_reporting() возвращает предыдущую установку типа сообщаемых ошибок. Если указан аргумент, то заново переопределяет ее. В аргументе можно указывать константу, число или битовую маску. Старайтесь использовать константы вместо численных значений, чтобы сохранить совместимость с будущими версиями PHP.
error_reporting(2039); // в PHP эквивалент E_ALL ^ E_NOTICE error_reporting(E_ALL ^ E_NOTICE); // установка по умолчанию error_reporting(0); // отключить сообщения об ошибках
// общие ошибки выполнения error_reporting(E_ERROR | E_WARNING | E_PARSE); // также сообщать о неизвестных переменных
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); error_reporting(E_ALL); // сообщать все ошибки
restore_error_handler
Восстановление предыдущего обработчика ошибок.
Синтаксис :
void restore_error_handler()
Эта функция устанавливает в качестве функции обработчика ошибок ту, которая была таковой до последнего вызова функции set_error_handler(). Предыдущим обработчиком может быть ранее установленный пользовательский обработчик или встроенный обработчик PHP.
trigger_error
Генерация ошибки.
Синтаксис :
void trigger_error(string error_msg [, int error_type])
Явно вызывает функцию, установленную для обработки ошибок, и обычно используется в паре с обработчиком ошибок. Функция способна генерировать только пользовательские типы ошибок ( семейство констант E_USER), и по умолчанию, если не указан тип ошибки error_type, он считается E_USER_NOTICE.
Возможно конструировать сложные конструкции генерации и обработки ошибок и исключительных ситуаций.
if(assert($divisor == 0))
trigger_error ("Нельзя делить на 0 ", E_USER_ERROR);
user_error
Синоним функции trigger_error().
Синтаксис :
void user_error(string error_msg [, int error_type])
Отслеживание и обработка ошибок : Установка пользовательского обработчика ошибок
set_error_handler
Установка пользовательского обработчика ошибок.
Синтаксис :
string set_error_handler(string error_handler)
Функция возвращает имя функции, ранее определенной в качестве обработчика ошибок (или FALSE при ошибке), и устанавливает, в качестве нового обработчика, функцию с указанным в аргументе error_handler именем.
Обычно пользовательский обработчик ошибок работает в паре с функцией trigger_error(), генерирующей ошибку. Это может быть использовано (подобно аналогичной конструкции работы с исключениями в C) для освобождения выделенных ресурсов (например, удаления созданных файлов), если сценарий не может нормально завершиться.
Функция, устанавливаемая в качестве обработчика ошибок, должна принимать пять параметров (три последних являются дополнительными и могут не обрабатываться):
•код ошибки
•строку, описывающую ошибку
•имя сценария, в котором произошла ошибка
•номер строки сценария, содержащей ошибку
•контекст (массив, содержащий значения переменных, в момент возникновения ошибки)
<?
//определить константы пользовательских ошибок define(FATAL, E_USER_ERROR);
define(ERROR, E_USER_WARNING); define(WARNING, E_USER_NOTICE);
//установить, какие ошибки должны обрабатываться в сценарии error_reporting (FATAL | ERROR | WARNING);
//пользовательский обработчик ошибок
function myErrorHandler($errno,$errstr,$errfile,$errline) { switch ($errno) {
case FATAL:
echo "<b>Критическая ошибка</b> [$errno] $errstr<br>\n"; echo "в строке: $errline файла:".$errfile;
echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n"; echo "Aborting...<br>\n";
exit -1; break; case ERROR:
echo "<b>Ошибка</b> [$errno] $errstr<br>\n"; break;
case WARNING:
echo "<b>Предупреждение</b> [$errno] $errstr<br>\n"; break;
default:
echo "Неизвестный тип ошибки: [$errno] $errstr<br>\n";
}
}
//функция для проверки обработки ошибок
//(масштабирование массива
function scale_by_log($vect, $scale) { if(!is_numeric($scale) || $scale <= 0)
trigger_error("вычислить log(x) для x <= 0 нельзя. ", "(x = $scale)", FATAL);
if(!is_array($vect)) { trigger_error("Требуется массив ", ERROR); return null;
}
for($i=0; $i<count($vect); $i++) { if(!is_numeric($vect[$i]))
trigger_error("Элемент ($i) не число и
его значением считается 0", WARNING); $temp[$i]=log($scale)*$vect[$i];
}
return $temp;
}
// установить пользовательский обработчик ошибок $old_error_handler=set_error_handler("myErrorHandler");
$a=array(2,3,"foo",5.5,43.3,21.11); print_r($a);
$b=scale_by_log($a,M_PI); // здесь выдается предупреждение echo "Массив, масштабированный на логарифм(Пи): ";
print_r($b);
$c=scale_by_log("not array",2,3); // здесь ошибка var_dump($c);
$d=scale_by_log($a, -2.5); // здесь критическая ошибка
echo "Продолжение сценария..."; ?>
При выполнении сценария вывод будет следующим:
Array
(
[0]=> 2
[1]=> 3
[2]=> foo
[3]=> 5.5
[4]=> 43.3
[5]=> 21.11
)
<b>Предупреждение</b> [1024] Элемент (2) не число, и его значением считается 0<br>
Массив, масштабированный на логарифм(Пи): Array
(
[0]=> 2.2894597716988
[1]=> 3.4341896575482
[2]=> 0
[3]=> 6.2960143721717
[4]=> 49.566804057279
[5]=> 24.165247890281
)
<b>Ошибка</b> [512] Требуется массив <br> NULL
<b>Критическая ошибка</b> [256] вычислить log(x) для x <=0 нельзя, (x = -2.5)<br>
в строке: 37, файла E:\www\exampl.php, PHP 4.0.5 (WINNT)<br> Aborting...<br>
Не забывайте, что при установке пользовательского обработчика ошибок стандартный обработчик PHP не используется. Установки error_reporting() также не будут иметь эффекта, и пользовательский обработчик должен уметь обрабатывать все виды ошибок (значение error_reporting() можно выяснить и действовать соответсвенно). Заметьте, что код ошибки будет равен 0, если ошибка возникла в функции, вывод ошибок для которой был блокирован оператором "@".
Также помните, что завершать сценарий в обработчике необходимо явно (например, с помощью функции die()), если, конечно, в этом есть необходимость. Если обработчик ошибок завершается с помощью return, то выполнение сценария продолжается с того места, в котором возникла ошибка (то есть исполняются инструкции, которые следуют за той инструкцией, в которой возникла ошибка).
Управление сессиями : Зачем нужны сессии.Механизм работы сессий
Зачем нужны сессии
Сессия представляет собой механизм, позволяющий хранить некоторые данные, индивидуальные для каждого пользователя (например, его имя и номер счета), между запусками сценария.
В Web-программировании есть один класс задач, который может вызвать довольно много проблем, если писать сценарий "в лоб". Речь идет о слабой стороне CGI - невозможности запустить программу на длительное время, позволив ей при этом обмениваться данными с пользователями.
Представте, что мы пишем форму, но в ней такое большое число полей, что было бы глупо поместить их на одну страницу. Нам нужно разбить процесс заполнения формы на несколько этапов, или стадий, и представить их в виде отдельных HTML-документов.
Например, в первом документе с диалогом у пользователя может запрашиваться его имя и фамилия, во втором - данные о его месте жительства, и в третьем - номер кредитной карточки. В любой момент можно вернуться на шаг назад, чтобы исправить те или иные данные. Наконец, если все в порядке, накопленная информация обрабатывается - например, помещается в базу данных.
Реализация такой схемы оказывается для Web-приложений довольно нетривиальной проблемой. Действительно, нам придется хранить все ранее введенные данные в каком-нибудь хранилище, которое должно аннулироваться, если пользователь вдруг передумает и уйдет с сайта. Для этого можно использовать функции сериализации и файлы. Однако ими мы решаем только половину проблемы: нам нужно как то привязать конкретного пользователя к конкретному временному хранилищу. Действительно, предположим, мы этого не сделали. Тогда, если в момент заполнения какой-нибудь формы одним пользователем на сайт зайдет другой и тоже попытается ввести свои данные, получится белеберда.
Все эти проблемы решаются при помощи сессий.
Механизм работы сессий
Для начала должен существовать механизм, который бы позволил PHP идентифицировать каждого пользователя, запустившего сценарий. То есть при следующем запуске PHP нужно однозначно определить, кто его запустил: тот же человек, или другой. Делается это путем присвоения клиенту так называемого уникального идентификатора сессии. Чтобы этот идентификатор был доступен при каждом запуске сценария, PHP помещает его Cookies браузера. Теперь, зная идентификатор (дальше SID), PHP может определить, в каком же файле на диске храняться данные пользователя.
Немного о том, как сохранять переменную (обязательно глобальную) в сессии. Для этого мы должны ее зарегестрировать с помощью специальной функции. После регистрации мы можем быть уверены, что при следующем запуске сценария тем же пользователем она получит то же самое значение, которое было у нее при предыдущем завершении программы. Это произойдет потому, что при завершении сценария PHP автоматически сохраняет все переменные, зарегестрированные в сессии, во временное хранилище. Конечно, можно в любой момент аннулировать переменную - вычеркнуть ее из сессии, или же уничтожить вообще все данные сессии.
Где же находиться то промежуточное хранилище, которое использует PHP? Вообще говоря, вы вольны сами это задать, написав соответствующие функции и зарегестрировав их как обработчики сессии. Впрочем, делать это не обязательно: в PHP уже существуют обработчики по умолчанию, которые хранят данные в файлах. Если вы не собираетесь создавать что-то особенное, вам они вполне подойдут.
