LINUX.ORG.RU

IRC: Ping-timeout


0

0

Вообщем написал я бота на php для своего IRC в локалке.


#!/usr/bin/php
<?php
#переменные
$obshecho=TRUE;
$host="192.168.11.3";
$server="<server>";
$port=6667;
$silent=FALSE;

#подключение
$fp = fsockopen($host, $port, &$errno, &$errstr);
if(!$fp) {
	echo "$errstr ($errno)<br>\n";
} else {
	fputs($fp,"NICK Fury3[BOT]\n");
	fputs($fp,"USER nonez \"\" \"localhost\" :nonev \n");
	fputs($fp,"JOIN #main \n");
	fputs($fp,"PRIVMSG Furyz :Я запустился,полет нормальный. \n");
	fputs($fp,"PRIVMSG #main :Бухать идем?\n");
        fputs($fp,"MODE #main +v Furyz \n");
    while (!feof($fp))
    {
    if($silent==FALSE){
	$obshak=fgets($fp,128);
	if($obshecho==TRUE){
	echo $obshak;
	}
	$ping = strpos($obshak, "PING :".$server);
	if($ping==TRUE){
	fputs($fp,"PONG :".$server."\n");
	}
	$spasibo = strpos($obshak, "спасибо");
	if($spasibo==TRUE){
	fputs($fp,"PRIVMSG #main :Всегда пожалуйста! \n");
	}
	$silent_mode= strpos($obshak, "!silent");
	if($silent_mode==TRUE){
	$silent=TRUE;
	fputs($fp,"PRIVMSG #main : =>SilentMode On \n");
	}
	$oper = strpos($obshak, "!giveop");
	if($oper==TRUE){
	fputs($fp,"MODE #main +o Furyz\n");
	}
	}
    } 
	fclose($fp);
}
	
?>

Запскаю:
./bot.php
Вообщем он заходит на канал , только его выбрасывает с pingtimeout.
Пытался это обработать - не получается.
$server и $host - разные значения , сервер - внешний домен , хост - IP

Сервер присылает запрос(я его вижу в консоле - выводится все что приходит)

PING :<имя_сервера>

Бот на него не отвечает.
Помогите найти и решить проблему.

P.S>Потестите у себя кто-то 

Посмотри _внимательно_ что возвращает strpos().
В документации на strpos обрати внимание на то что выделено рамочкой со словом Warning.

alexs
()
Ответ на: комментарий от alexs

>Посмотри _внимательно_ что возвращает strpos().
>В документации на strpos обрати внимание на то что выделено рамочкой со >словом Warning.

/me ушел смотреть

Можеш помочь как ЭТО исправить?

fury3
() автор топика
Ответ на: комментарий от fury3

<!
Внимание

Эта функция может возвращать как логическое значение FALSE, так и не относящееся к логическому типу значение, которое приводится к FALSE, например, 0 или "". За более подробной информации обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
<!

то есть узнать что она возвращает?

fury3
() автор топика
Ответ на: комментарий от fury3

> Можеш помочь как ЭТО исправить?
Ткнуть какие слова на какие заменить? Нет смысла, imho.

> то есть узнать что она возвращает?
$ping = strpos($obshak, "PING :".$server);
print "got ping=\"$ping\"\n";

alexs
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.