Функции, описанные в этой главе, позволяют осуществлять обмен данными по сети. По сравнению с функциями работы с файлами сетевые функции работают на более низком уровне, что позволяет добиться большей гибкости и полного доступа к данным.
10.1. Общие операции ввода-вывода
Функции, которые описываются в этом разделе, предназначены для обеспечения общего и упрощенного доступа в Internet. Некоторые из этих функций работают с определенными сетевыми службами или возвращают информацию о них.
checkdnsrr
Функция checkdnsrr используется в качестве псевдонима функции dns_check_record.
boolean dns_check_record(string host, string type)
Функция dns_check_record (листинг 10.1) производит проверку DNS-записей узла. Аргумент определяет тип искомых записей. (Допустимые типы приведены в табл. 10.1.) Если тип не задан, функция dns_check_record выполняет проверку записей типа MX. Типы записей можно посмотреть на man-странице, посвященной демону сервера доменных имен Internet (Internet domain name server).

| Листинг 10.1. Функция dns_check_record_
<?php
if(dns_check_record("php.net", "MX")) {
print("php.net является утилитой обмена почтой");
}
Операции ввода-вывода на сетевом уровне
boolean dns_get_mx(string host, array mxhost, array weight)
Функция dns_get_mx (листинг 10.2) принимает DNS-записи почтовой системы. Имена узлов прибавляются к массиву, определенному аргументом mxhost. Необязательный массив weight хранит весовые коэффициенты узлов. Возвращаемое значение определяет успешность завершения операции. Пример использования функции dns_get_mx для проверки адресов электронной почты приведен в главе 24, "Сети".

| Листинг 10.2. Функция dns_get_mx_
<?php
//получить записи почтовой программы для netscape.com dns_get_mx("netscape.com", $mxrecord, $weight); // отобразить результаты foreach($mxrecord as $key=>$host)
{
print("$host - $weight[$key]<br>n");
}

array dns_get_record(string hostname, integer type, array authoritative, array additional)
Функция dns_get_record для заданного узла возвращает массив с записями о ресурсах DNS. Каждый элемент массива сам является ассоциативным массивом. В табл. 10.2 приведены вероятные элементы возвращаемого массива. Необязательный аргумент type управляет возвращаемой записью. В табл. 10.3 приведены допустимые типы констант.
По умолчанию PHP делает попытку вернуть записи любого типа, что задается установкой типа DNS_ANY. В зависимости от операционной системы режим, принятый по умолчанию, может не возвратить все имеющиеся записи. Установка режима DNS_ALL приводит к возвращению всех записей. При работе на платформе Windows эта функция отсутствует.
Необязательный аргумент authoritative принимает массив записей от сервера авторизации имен (authoritative name server). Необязательный аргумент additional принимает массив дополнительных записей.
Операции ввода-вывода на сетевом уровне
integer fsockopen(string hostname, integer port, integer error_number, string error_description, double timeout)
Функция fsockopen (листинг 10.3) открывает сетевое соединение как файловый поток, возвращающий дескриптор файла, с которым могут работать функции fputs, fgets и другие функции, работающие с файловыми потоками. Соединение с узлом производится через указанный порт. Имя узла может быть представлено цифровым IP-адресом или доменным сокетом Unix, но в таком случае номер порта устанавливается равным 0. Некоторые операционные системы, в частности Windows, не поддерживают работу с доменными сокетами Unix. Для замены протокола, используемого для соединения, имя узла предваряется префиксом, содержащим квалификатор протокола. Добавление префикса udp:// откроет UDP-соединение, а добавление префикса ssl:/ / или tls:// откроет со­единение SSL или TLS соответственно, но только если PHP работает с расширением OpenSSL.
В случае ошибки возвращается значение FALSE и устанавливаются необязательные аргументы error_number и error_description. Если возвращается нуль, это значит, что ошибка произошла до того, как PHP сделал попытку подключиться. Это может быть связано с проблемами инициализации сокета.