Работа с сокетами: fsockopen
Функцию 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).
Сценарий на PHP эмуляции браузера.
Посылаем в порт 80 удаленного хоста HTTP-запрос GET и получаем весь ответ вместе с заголовками.
<?
// Соединяемся с Web-сервером site.net
$fp = fsockopen("site.net", 80);
// Посылаем запрос главной страницы сервера
fputs($fp,"GET / HTTP/1.0\n\n");
// Теперь читаем по одной строке и выводим ответ
echo "<pre>";
while(!feof($fp))
echo HtmlSpecialChars(fgets($fp,1000));
echo "</pre>";
// Отключаемся от сервера
fclose($fp);
?>
Функция fsockopen() универсальна и может использоваться для подключения
к FTP-порту и к telnet-порту.