Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么导致PHP中出现这种延迟?_Php_Irc - Fatal编程技术网

是什么导致PHP中出现这种延迟?

是什么导致PHP中出现这种延迟?,php,irc,Php,Irc,我有一个关于PHP脚本的问题,我写这个脚本是为了连接到一个从IRC服务器收集统计数据的服务器,作为一个测试,因为我是PHP新手,还在学习 以下是脚本: <?php set_time_limit(0); $servers = array( "irc.icq.com", "irc.quakenet.org" ); function get_statistics ($server, $port) { $nick = 'IRCDir' .

我有一个关于PHP脚本的问题,我写这个脚本是为了连接到一个从IRC服务器收集统计数据的服务器,作为一个测试,因为我是PHP新手,还在学习

以下是脚本:

<?php
set_time_limit(0);

$servers = array(
           "irc.icq.com",
           "irc.quakenet.org"
);

function get_statistics ($server, $port) {
    $nick   = 'IRCDir' . rand(1000, 9999);
    $irc = fsockopen($server, $port);

    fputs($irc,"USER $nick 0 * :$nick\n");
    fputs($irc,"NICK $nick\n");


    while ($data = fgets($irc, 128)) {

        $ex = explode(' ', $data);

        if (isset($ex[0]) && $ex[0] == "PING") {
            fputs($irc, "PONG ".$ex[1]."\n");
        }

        if (count($ex) > 0) {

            if (isset($ex[1]) && $ex[1] == "001") {
                $network = $ex[6];
                echo date('h:i:s') . " network: " . $server;
                echo "\n";
            }

            if (isset($ex[1]) && $ex[1] == "002") {
                $server = str_replace(',', '', $ex[6]);
                echo date('h:i:s') . " server: " . $server;
                echo "\n";
            }

            if (isset($ex[1]) && $ex[1] == "251") {
                $users   = $ex[5] + $ex[8];
                $servers = $ex[11];
                echo date('h:i:s') . " users: " . $users;
                echo "\n";
                echo date('h:i:s') . " servers: " . $servers;
                echo "\n";
            }

            if (isset($ex[1]) && $ex[1] == "252") {
                $ircops = $ex[3];
                echo date('h:i:s') . " ircops: " . $ircops;
                echo "\n";
            }

            if (isset($ex[1]) && $ex[1] == "254") {
                $channels = $ex[3];
                echo date('h:i:s') . " channels: " . $channels;
                echo "\n";
            }

        }

    }
    fclose($irc);
}

foreach ($servers as $server) {
    echo date('h:i:s') . " getting statistics for " . $server;
    echo "\n";
    get_statistics($server, '6667');
}

exit;
?>
我的问题是,是什么导致了索引服务器之间的延迟

在10:24:19,它已经完成了
irc.icq.com
的索引,因此此时它应该断开连接并立即索引阵列中的下一台服务器,但它不是在这样做之前等待一分钟,而是在脚本中没有提到一分钟


希望一些PHP大师能伸出援手

60秒是默认的套接字超时。在您已经获得了所有要获取的信息之后,您将继续尝试从流中读取,直到最后达到超时。

是否总是精确到60秒?考虑到精确到60秒,看起来PHP正在等待什么,或者IRC服务器正在等待什么。不管是哪种情况,连接都无法正常运行,必须超时。@dwhite.me我正在向数组中添加更多服务器,并用更多结果更新问题。@NiettheDarkAbsol我希望脚本在收集完所有变量后关闭连接。我猜我做错了,或者把
fclose
放在了错误的地方……我猜你的乒乓球密码坏了,你再也没有跳出循环。它总是在等待服务器结束连接。有没有建议的方法?我猜我现在的
fclose($irc)就没有意义了。我应该把这个移到
$channels
块中吗?@GeraldSchneider谢谢,很简单:PI不太了解IRC的答案。。但您应该查看流中是否有已完成的指标,然后
fclose
连接和
break
循环
root@li140-48:~# php bot.php
11:04:23 getting statistics for irc.freenode.net
11:04:24 network: irc.freenode.net
11:04:24 server: sendak.freenode.net
11:04:24 users: 90601
11:04:24 servers: 26
11:04:24 ircops: 22
11:04:24 channels: 50958
11:05:25 getting statistics for irc.icq.com
11:05:26 network: irc.icq.com
11:05:26 server: irc-k01a.orange.icq.com
11:05:26 users: 2671
11:05:26 servers: 3
11:05:26 ircops: 16
11:05:26 channels: 810
11:06:26 getting statistics for irc.quakenet.org
11:06:28 network: irc.quakenet.org
11:06:28 server: blacklotus.ca.us.quakenet.org
11:06:28 users: 37648
11:06:28 servers: 40
11:06:28 ircops: 67
11:06:28 channels: 26711
root@li140-48:~#