Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ржат- 

ся имена всех таблиц, присутствующих в базе данных. Для извлечения этих имен 
можно использовать функцию mysql_result() с номером колонки, равным 0. 


Глава 27 
Сетевые функции 
Здесь я коротко рассмотрю некоторые сетевые функции, предоставляемые PHP. За 
более детальной информацией обращайтесь к сопроводительной документации. 
Работа с сокетами 
Помните, до этого мы обсуждали функцию fopen() и замечали, что ее можно ис- 
пользовать и для открытия сетевых соединений с файлами на других хостах в Сети. 

Однако функция fopen() позволяла работать лишь с содержимым файла, передан- 
ного по протоколу HTTP. Но ведь по HTTP, кроме "тела" документа, передаются 
так- 
же некоторые заголовки, посланные сервером. "Добраться" до них всех и позволяет 

функция fsockopen(). 
int fsockopen(string $host, int $port [,int &$errno] [,string &$errstr]) 
Эта функция работает аналогично fopen(), но только устанавливает сетевое 
соединение с 
указанным хостом $host и программой, закрепленной на нем за портом $port. Она 
воз- 
вращает файловый дескриптор, с которым затем могут быть выполнены обычные 
опера- 
ции: fread(), fwrite(), fgets(), feof() и т. д. В случае ошибки, как обычно, 
воз- 
вращается false и, если заданы параметры-переменные $errno и $errstr, в них 
записываются соответственно номер ошибки (не равный нулю) и текст сообщения об 
ошибке. Если функция вернула false, но $errno тем не менее сбросилась в 0, это 
скорее всего означает, что произошла ошибка инициализации сокета. Например, та- 

кое может произойти, если в Windows не установлен требуемый протокол TCP/IP. 
Функция fsockopen() поддерживает и так называемые сокеты домена Unix, кото- 
рые представляют собой в этой системе специальные файлы, наподобие каналов. Для 

использования такого режима нужно установить $port в 0 и передать в $host имя 
файла сокета. Мы не будем останавливаться на этом режиме, т. к. он специфичен 
для 
ОС Unix. 
По умолчанию сокет (соединение) открывается в режиме чтения и записи, используя 

блокирующий режим передачи. Вы можете переключить режим в неблокирующий, 
если вызовете функцию socket_set_blocking() (см. ниже). 
В примере из листинга 27.1 мы "проэмулировали" браузер, послав в порт 80 
удален- 
ного хоста HTTP-запрос GET и получив весь ответ вместе с заголовками. Мы 
исполь- 
зуем функцию HtmlSpecialChars(), чтобы вывести HTML-код документа в тек- 
стовом формате. 

Часть IV. Стандартные функции PHP 382 
Листинг 27.1. "Эмуляция" браузера 
"; 
while(!feof($fp)) 
echo HtmlSpecialChars(fgets($fp,1000)); 
echo "
"; // Отключаемся от сервера fclose($fp); ?> Разумеется, никто не обязывает нас использовать именно 80-й порт. Даже наоборот: функция fsockopen() универсальна. Мы можем использовать ее и для подключения к telnet-порту, и к FTP — словом, для чего угодно. int socket_set_blocking(int $sd, int $mode) Эта функция устанавливает блокирующий или неблокирующий режим для соедине- ния, открытого ранее при помощи fsockopen(). В режиме блокировки ($mode=true) функции чтения будут "засыпать", пока передача данных не завершит- ся. Таким образом, если данных много, или же произошел какой-то "затор" в сети, ваша программа остановится и будет дожидаться выхода из функции чтения. В ре- жиме запрета блокировки ($mode=false) функции наподобие fgets() будут сразу же возвращать управление в программу, даже если через соединение не было переда- но еще ни одного байта данных. Таким образом, считывается ровно столько инфор- мации, сколько доступно на данны
 
<<-[Весь Текст]
Страница: из 287
 <<-