这是我的代码:
<?php
$sock = fsockopen("localhost", 6667);
fwrite($sock, "NICK PHP_thang\r\n");
fwrite($sock, "USER fikeh fikeh fikeh :Fikeh's Thang\r\n");
fwrite($sock, "JOIN #LightSpike\r\n");
while (True) {
echo fgets($sock);
if (strpos(fgets($sock), "!about")) {
fwrite($sock, "PRIVMSG #LightSpike :\x02Fike's PHP Bot:\x02 Fike's test bot.\r\n");
}
}
?>
基本上,它会查看从套接字接收的行,如果找到“!about”,它会向通道写入一条消息。但事实并非如此。谁能帮我吗?谢谢!
答案 0 :(得分:1)
您正在使用echo fgets($sock);
读取流,以清除流。当执行到达条件下一行时,fgets( $sock )
为空。删除回显线或首先将内容放入变量:
while (True) {
$buffer = fgets( $sock );
echo $buffer;
if( strpos( $buffer, "!about" ) !== false ) {
...
}
}
另请注意,如果搜索字符串位于行的开头strpos()
,则0
会返回0 == false
。使用strpos()
时,您应始终使用strpos( $needle, $haystack ) === false
(或!== false
)。
答案 1 :(得分:0)
请注意,fgets
将从套接字读取一行,但该行只读取一次。下次再次致电fgets
时,将会读取下一行。所以,你应该读一个变量中的行,然后只用变量做东西。您现在设置的方式是,服务器响应的一半将是echo
',并且将检查一半!about
命令。