Как открывать соединение через сокеты, без печатанья ответа сервера?

Ysn

Guest
Как открывать соединение через сокеты, без печатанья ответа сервера?

На http://www.sspro.ru/?mod=SiteArticles&act=2&article_id=281&item_id=6 есть пример:
PHP:
<?
// Подключаемся к серверу
1. $fsoc = fsockopen("localhost",80);
2. fputs($fsoc, "GET / HTTP/1.0\n\n");
3. echo "";
4. while (!feof($fsoc))
5. echo HtmlSpecialChars(fgets($fsoc,1000));
6. echo "";
// Отключаемся от сервера
7. fclose($fsoc);
?>
Но он выводит наверху документа ответ сервера... Как его(ответ сервера) не выводить?
 

SiMM

Новичок
Re: Как открывать соединение через сокеты, без печатанья ответа сервера?

Автор оригинала: Ysn
Как его(ответ сервера) не выводить?
Так ты его не выводи.
hint: заголовок отделяется от документа одной "пустой" (не содержащей ничего кроме перевода строки) строчкой.
PS: интересно, какую смысловую нагрузку несут строки echo ""; ;)
 

Ysn

Guest
Я просто скопировал пример с документации... Так что этот вопрос не ко мне. У меня это дело выглядит как:

$fsoc = fsockopen("localhost",80);
fputs($fsoc, "GET / HTTP/1.0\n\n");
while (!feof($fsoc)) {echo fgets($fsoc,1000); }
fclose($fsoc);

Значит, искать \r\n ? Не могу сообразить - как тут это делать :(

-~{}~ 31.12.04 09:10:

А ведь есть какая-то функция, которая ищет первую встречу с энными символами, после чего начинает выводить все... Хм... Забыл название.

-~{}~ 31.12.04 09:12:

strstr(), чтоб ее... :)

-~{}~ 31.12.04 09:15:

Не-а... все равно не работает... только теперь уже и файл не выводит

-~{}~ 31.12.04 09:21:

$fsoc = fsockopen("localhost",80);
fputs($fsoc, "GET / HTTP/1.0\n\n");
$domain = strstr($fsoc, '\n\n');
while (!feof($fsoc)) {echo fgets($domain ,1000); }
fclose($fsoc);

Так ей не понравилось... Что я неправильно делаю?

-~{}~ 31.12.04 10:00:

Хто-нибудь! Отзовитесь :)
 

SiMM

Новичок
Автор оригинала: Ysn
Я просто скопировал пример с документации...
Во-первых, это пример не из документации, во-вторых - примеры в документации даны не для того, чтобы их ТУПО копировали, в-третьих, ты не поверишь, но в документации есть масса подходящих рабочих примеров от пользователей.
Что я неправильно делаю?
Головой работать не пытаешься, либо пытаешься недостаточно хорошо - потому что $domain = strstr($fsoc, '\n\n'); - содержит ужасную логическую ошибку, одну синтаксическую и ещё одну, которую я не могу даже классифицировать.
 

Ysn

Guest
Не мной писано... из мануала. Я пытался \r\n. Что еще? Другой ошибки я не вижу.
 

SiMM

Новичок
Для тех, кто не знает, что такое мануал. Мануал - это здесь. А тем, кто не знает базового синтаксиса - сюда

-~{}~ 31.12.04 10:50:

Да, и вот ещё что. Я внимательно просмотрел ман, но таких бредней
$fsoc = fsockopen("localhost",80);
fputs($fsoc, "GET / HTTP/1.0\n\n");
$domain = strstr($fsoc, '\n\n');
while (!feof($fsoc)) {echo fgets($domain ,1000); }
fclose($fsoc);
я там не обнаружил
 

Ysn

Guest
Читал бы внимательнее... Я же написал, что это бредня моего производства...

Вообще-то, если бы ты показал как это решается - я был бы тебе благодарен. Найти решение из ссылки, которую ты дал - я не смог.

С праздником всех!
 

Ysn

Guest
Хм... И как выглядит вызов этой фукнции, когда этот пример работает? У меня он не пашет... Или бесконечный цикл, или еще что-нибудь - в зависимости от того, как вызывать.
 

SiMM

Новичок
Ysn, приведённый там код - только идея, и не надо его Cut&Paste'ть, потому как кривость ещё та.
PHP:
<? echo fetchURL('http://www.yandex.ru:80/yandsearch?rpt=rad&text=test'); ?>
PS: пошёл бы ты книжки чтоли какие почитал - потому что выдавать такие шедевры невозможно даже после школьной информатики.

-~{}~ 01.01.05 13:15:

Хотя я наверно не правильно к вопросу подошёл. Возьми свой код
$fsoc = fsockopen("localhost",80);
fputs($fsoc, "GET / HTTP/1.0\n\n");
$domain = strstr($fsoc, '\n\n');
while (!feof($fsoc)) {echo fgets($domain ,1000); }

fclose($fsoc);
Обяъсни мне, будь любезен, смысл действий и их последовательность в выделенном наборе строк.
 

IT

Guest
$domain = strstr($fsoc, '\n\n');
Ysn, Да это ты сильно задвинул )))

Ну если всетаки и мануал не помог, то заголовок мона пропустить так:

while(fgets($fsoc,2048)!="\r\n" && !feof($fsoc));

Ну а дальше читаеш уже чистый документ)
 

Ysn

Guest
Не поверите, но даже я, даже сделал... :)
Теперь, не подскажите ли, как вычитать установки php? Мне нужно прочитать значение allow_url_fopen - как и чем? Я попробовал ini_get_all ... Написано, что она дает ассоц. массив. Но
$r=ini_get_all();
print $r['allow_url_fopen'];

не работает...

p.s. Извините уж, что не отвечаю на "будь любезен, объясни..."... Но, чувствую, что подобный разговор ни к чему приятно не приведет... Поверьте, учусь... Но комментировать человека в процессе обучения - не стоит.
 

SiMM

Новичок
Автор оригинала: Ysn
Мне нужно прочитать значение allow_url_fopen - как и чем?
[m]ini_get[/m]
Я попробовал ini_get_all ...
[m]print_r[/m]([m]ini_get_all[/m]());
Запомни одну вещь - если хочешь, чтобы к тебе относились адекватоно - никогда не говори не работает. Во-первых, начинай с внимательного прочтения документации по используемой функции (благо это делается легко - пишешь в браузере php.net/имя_функции), во-вторых, научись отлаживать скрипты - PHP FAQ: Ничего не работает! Что делать??? (print_r - это как раз оттуда), в-третьих, твои попытки отладить самостоятельно позволят тебе написать более чёткосфорумлированный вопрос, а не просто фразу "не работает".
p.s. Извините уж, что не отвечаю на "будь любезен, объясни..."... Но, чувствую, что подобный разговор ни к чему приятно не приведет...
Ну и зря - дело конечно твоё. А приведёт это к чему-нибудь приятному или нет - зависит от адекватности оценки происходящего.
Поверьте, учусь...
Верю, но это не избавляет тебя от необходимости ПОНИМАТЬ каждую строчку написанного тобой кода
Но комментировать человека в процессе обучения - не стоит.
Ошибаешься. Подобная практика позволяет приобретать некоторые понятия, если у тебя их нет, а так же избавляться от граблей в будущем.
 

IT

Guest
попробуй так:
PHP:
print $r['allow_url_fopen']['global_value'];
А вобще на будующее очень полезная функция print_r(), выводит полную структуру массива.
 

Ysn

Guest
Возможно, ты и прав, SiMM... Возможно. Я попробую так, как ты говоришь.

p.s. с allow_url_fopen ничего пока не получается. Буду разбираться. Если что - начну новую тему... а то эта великовата...
 
Сверху