• XSS.stack #1 – первый литературный журнал от юзеров форума

fsockopen() или кодим сокеты в php

red_byte

(L3) cache
Пользователь
Регистрация
06.05.2005
Сообщения
199
Реакции
4
Код:
#######################
# Автор: red_byte            
# Источник:http://darkcoders.net 
#######################
[Функция fsockopen()]
Я надеюсь, ты уже знаешь, что такое сокеты, поэтому не будем терять времени на теорию, а приступим сразу к практике. Для наглядности рассмотрим самый банальный пример - получение HTTP-заголовков от сервера.
Код:
<?
$timeout = 25;
$host = "darkcoders.net";
$port = 80;
$page="index.php";
//Открываем сокет
$sock = fsockopen($host,$port,$errno,$errstr,$timeout);
if (!$sock)
{print "Невозможно открыть сокет
$errstr($errno)";}
//Формируем HTTP-запрос
fputs($sock,"GET http://darkcoders.net/$page HTTP/1.0\r\n\r\n");
//Читаем из сокета первые 200 байт
$header = fgets($sock,200);
fclose($sock);
//Сравниваем первые 15 байт обоих строк
if (strncmp($header,"HTTP/1.1 200 OK",15)==0)
//Если совпадают...
{
print "Страница существует";
} else
{
//Если не совпали, значит ошибка
print "Такой страницы нет
Header: ".$header;
}
?>
В данном коде мы открываем соединение с сервером darkcoders.net на 80 порт и запрашиваем

страницу, определенную в переменной $page. Далее мы сравниваем первые 15 строк с

эталоном, и если все совпадает, тогда страница существует.
Допустим, нам надо получить не только заголовки, но и весь код страницы.
Реализуется это так:
Код:
<?
//Открываем сокет
$sock = fsockopen("darkcoders.net", 80, $errno, $errstr, 30);
//Если ошибка, то выводим ее
if (!$sock) 
{
echo "$errstr ($errno)
\n";
} else 
{
//Делаем HTTP-запрос
    fputs ($sock, "GET / HTTP/1.0\r\nHost: darkcoders.net\r\n\r\n");
//Пока не дойдем до конца, 
    while (!feof($sock)) 
        {
        //читаем блоками по 200 байт и выводим их
        echo fgets ($sock,200);
        }
//Закрываем сокет
    fclose ($sock);
}

?>
Как видишь, взаимодействовать с plain-text'овыми сетевыми сервисами довольно просто. Таким образом можно взаимодействовать не только с HTTP, но и с IRC, FTP, TELNET и некоторыми другими протоколами. Ну вот, теперь ты можешь написать свое небольшое сетевое приложение, которое, возможно станет изюминкой твоего сайта.
(При копировании статьи обязательно указывать источник)
 
молодец!

теперь статью, как комп включать, напиши!

[mod][Winux:] Если легко для тебя - не значит что легко для всех. Не нравится - не читай. Никто тебя не заставляет.[/mod]
 
007NOT@
Жжошь=))) Это документация. Тем более на фиглише. Я не открываю что-то новое. Вообще то статьи пишутся для того, чтобы народ что то понял. Для меня сокеты - это уже давно пройденный этап. Я решил поделиться с людьми с форума, надеясь на то, что возможно они почерпнут для себя что то новое. Если ты напишешь статью, которой не будет аналогов (изобретешь что то новое), то я буду за тебя только рад. =))
Добавлено в [time]1138813016[/time]
ps как поточноть замутить бы кто подсказал бы
Поточность? хм, ок. Думаю скоро напишу эту статью специально для тебя (если время будет). Тебя потоки именно в пхп интересуют?
 
nerezus
Я не перепечатывал ман. Взял только это
Код:
<?
//Открываем сокет
$sock = fsockopen("darkcoders.net", 80, $errno, $errstr, 30);
//Если ошибка, то выводим ее
if (!$sock) 
{
echo "$errstr ($errno)
\n";
} else 
{
//Делаем HTTP-запрос
   fputs ($sock, "GET / HTTP/1.0\r\nHost: darkcoders.net\r\n\r\n");
//Пока не дойдем до конца, 
   while (!feof($sock)) 
       {
       //читаем блоками по 200 байт и выводим их
       echo fgets ($sock,200);
       }
//Закрываем сокет
   fclose ($sock);
}

?>
чтобы не быть голословным, что называется. И еще: не все по фиглишу читают=))) И вообще, nerezus, если тебе не нравится, Winux правильно сказал, не выпендривайся и не оффтопь в теме, пусть лучше поучатся те, кто не знает.
 
>[Winux:] Если легко для тебя - не значит что легко для всех. Не нравится - не читай. Никто тебя не заставляет.
что за бред, кому не легко пусть вообще пользуют готовое )
Жжошь=))) Это документация. Тем более на фиглише. Я не открываю что-то новое. Вообще то статьи пишутся для того, чтобы народ что то понял. Для меня сокеты - это уже давно пройденный этап. Я решил поделиться с людьми с форума, надеясь на то, что возможно они почерпнут для себя что то новое. Если ты напишешь статью, которой не будет аналогов (изобретешь что то новое), то я буду за тебя только рад. =))
:fool:
тогда написал бы что такое сокеты , иначе некоторые не поймут.
единственное что почерпнут, что не нада юзать ман и гугла.
а пренебрежение к ману и английскому ещё ни кому не помагала, про аналоги я бы сказал просче или новое , или лучше
 
Ладно, проехали. Согласен статью надо доработать. Всем спасибо за объективную критику. P.S. Как сказал неизвестный кодер - "Все мы не без багов". ;)
 
окок. Ток не пойму я, че все такие агрессивные=))) Ребят, вам че не дают? :P
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх