PHP IRC 机器人不响应命令


PHP IRC bot not responding to commands

这是我的代码:

<?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命令。