这是我的代码:
<?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",它会向通道写入一条消息。但事实并非如此。谁能帮我?谢谢!
您正在使用清除流的echo fgets($sock);
读取流。当执行到达条件下一行时,fgets( $sock )
为空。删除回声线或先将内容放入变量:
while (True) {
$buffer = fgets( $sock );
echo $buffer;
if( strpos( $buffer, "!about" ) !== false ) {
...
}
}
另请注意,如果搜索字符串位于行首并0 == false
,则strpos()
返回0
。对于strpos()
,您应该始终使用 strpos( $needle, $haystack ) === false
(或!== false
(。
请注意,fgets
将从套接字读取一行,但该行仅读取一次。下次再次调用fgets
时,将读取下一行。所以,你应该阅读变量中的行,然后只用变量做一些事情。按照您现在的设置方式,一半的服务器响应将被echo
,另一半将被检查!about
命令。