【问题标题】:How can I break this PHP while loop?我怎样才能打破这个 PHP while 循环?
【发布时间】:2017-02-10 06:33:48
【问题描述】:

我是 PHP 新手,正在开发一个加入频道、发送消息然后退出的 IRC 机器人。

除了 $message 发送后(第 6 行),脚本中的所有内容都正常工作,我不明白如何退出无限循环。

// Open Internet connection
$socket = fsockopen("$server", $port);
fputs($socket,"USER $nick $nick $nick $nick :$nick\n");
fputs($socket,"NICK $nick\n");
fputs($socket,"JOIN ".$chan."\n");
fputs($socket, "PRIVMSG ".$chan." :$message1\n");


// Begin while loop
while(1) {
    while($data = fgets($socket)) {
        echo nl2br($data);
        flush();

        $ex = explode(' ', $data);
        $channel = $ex[2];
        $nicka = explode('@', $ex[0]);
        $nickb = explode('!', $nicka[0]);
        $nickc = explode(':', $nickb[0]);

        // $host = $nicka[1];
        $nick = $nickc[1];
        if($ex == "PING"){
            fputs($socket, "PONG ".$ex[1]."\n");
        }

        $args = NULL; for ($i = 4; $i < count($ex); $i++) { $args .= $ex[$i] . ' '; }

    }
}

【问题讨论】:

  • 为什么你有两个循环?
  • break 2; 也许?

标签: php while-loop bots irc


【解决方案1】:

您只需要 1 个 while 循环,当条件为真时将停止。

您可以阅读http://php.net/manual/en/control-structures.while.php

while(1) {     // <-- Remove the infinite loop 
    while($data = fgets($socket)) {

【讨论】:

    【解决方案2】:

    如果您必须让套接字保持打开状态,则需要一段时间。解决此问题的最佳方法是使用回调。但是,如果您只想打破时间。

    // Open Internet connection
    $socket = fsockopen("$server", $port);
    fputs($socket,"USER $nick $nick $nick $nick :$nick\n");
    fputs($socket,"NICK $nick\n");
    fputs($socket,"JOIN ".$chan."\n");
    fputs($socket, "PRIVMSG ".$chan." :$message1\n");
    
    
    // Begin while loop
    all_data_received = False
    while(1) {
    while($data = fgets($socket)) {
        echo nl2br($data);
        flush();
    
        $ex = explode(' ', $data);
        $channel = $ex[2];
        $nicka = explode('@', $ex[0]);
        $nickb = explode('!', $nicka[0]);
        $nickc = explode(':', $nickb[0]);
    
        // $host = $nicka[1];
        $nick = $nickc[1];
        if($ex == "PING"){
            fputs($socket, "PONG ".$ex[1]."\n");
        }
    
        $args = NULL; for ($i = 4; $i < count($ex); $i++) { $args .= $ex[$i] . ' '; 
    
        all_data_received = True //or some other conditions 
    
        }
    
        if (all_data_received == True){
            break;
            }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 2020-08-14
      • 1970-01-01
      • 2022-12-18
      • 2017-06-25
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多