Как я могу разорвать этот PHP в то время как цикл?

Я новичок в PHP и работаю над IRC-ботом, который присоединяется к каналу, отправляет сообщение и затем завершает работу.

В скрипте все работает, кроме того, что после отправки сообщения $ (строка 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] . ' '; }

}
}

1

Решение

Вам нужно иметь только 1 цикл while, который остановится, когда условие будет выполнено.

Ты можешь читать http://php.net/manual/en/control-structures.while.php

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

Другие решения

Если вам нужно оставить розетку открытой, вам нужно время. Лучший способ решить это с помощью обратного вызова. Но если вы только хотите сломать время.

// 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;
}

}
0

По вопросам рекламы [email protected]