在 PHP 中解析 IP 地址


Parsing ip addresses in php

我正在尝试通过连接的 IP 从日志文件中获取活动连接数(实时)并具有播放状态,但相反,它给了我状态播放的 IP 总数。这个数字一点也不减少。添加新 IP 后立即继续增加。我该如何解决它?这是我的代码:

$stringToParse = file_get_contents('wowzamediaserver_access.log');
preg_match_all('/'d{1,3}'.'d{1,3}'.'d{1,3}'.'d{1,3}/', $stringToParse, $matchOP);
echo "Number of connections: ".sizeof(array_unique($matchOP[0]));

这是日志:

2013-10-30  14:54:36    CET stop    stream  INFO    200 account1    -   _defaultVHost_  account1    _definst_   149.21  streamURL   1935    fullStreamURL   IP_ADDRESS_1    http (cupertino)    -   
2013-10-30  14:56:12    CET play    stream  INFO    200 account2    -   _defaultVHost_  account1    _definst_   149.21  streamURL   1935    fullStreamURL   IP_ADDRESS_2    rtmp (cupertino)    -   
2013-10-30  14:58:23    CET stop    stream  INFO    200 account2    -   _defaultVHost_  account1    _definst_   149.21  streamURL   1935    fullStreamURL   IP_ADDRESS_2    rtmp (cupertino)    -   
2013-10-30  14:58:39    CET play    stream  INFO    200 account1    -   _defaultVHost_  account1    _definst_   149.21  streamURL   1935    fullStreamURL   IP_ADDRESS_1    http (cupertino)    -
2013-10-30  14:59:12    CET play    stream  INFO    200 account2    -   _defaultVHost_  account1    _definst_   149.21  streamURL   1935    fullStreamURL   IP_ADDRESS_2    rtmp (cupertino)    -

我希望能够在 IP 处于"播放"状态时对其进行计数,而在 IP 处于"停止"状态时不计算

    2013-10-30  14:59:00    CET play    stream  INFO    200 tv2vielive  -   _defaultVHost_  tv2vielive  _definst_   0.315   [any]   1935    rtmp://tv2vie.zion3cloud.com:1935/tv2vielive    78.247.255.186  rtmp    http://www.tv2vie.org/swf/flowplayer-3.2.16.swf WIN 11,7,700,202    92565864    3576    3455    1   0   0   0   tv2vielive  -   -   -   -   -   rtmp://tv2vie.zion3cloud.com:1935/tv2vielive/tv2vielive rtmp://tv2vie.zion3cloud.com:1935/tv2vielive/tv2vielive -   rtmp://tv2vie.zion3cloud.com:1935/tv2vielive    -

2013-10-30  14:59:04    CET stop    stream  INFO    200 tv2vielive  -   _defaultVHost_  tv2vielive  _definst_   4.75    [any]   1935    rtmp://tv2vie.zion3cloud.com:1935/tv2vielive    78.247.255.186  rtmp    http://www.tv2vie.org/swf/flowplayer-3.2.16.swf WIN 11,7,700,202    92565864    3576    512571  1   7222    0   503766  tv2vielive  -   -   -   -   -   rtmp://tv2vie.zion3cloud.com:1935/tv2vielive/tv2vielive rtmp://tv2vie.zion3cloud.com:1935/tv2vielive/tv2vielive -   rtmp://tv2vie.zion3cloud.com:1935/tv2vielive    -

有什么解决办法吗?我什至尝试了第一个答案解决方案,但得到了"0"播放连接。

$stringToParse = file_get_contents('wowzamediaserver_access.log');
$pattern = '~^.* play.* ( ([0-9]{1,3}+'.){3,3}[0-9]{1,3}).*$~m';
preg_match_all($pattern, $stringToParse, $matches);
echo count($matches[1]) . ' play actions';

但是每当我使用我的代码时:

$stringToParse = file_get_contents('wowzamediaserver_access.log');
preg_match_all('/'d{1,3}'.'d{1,3}'.'d{1,3}'.'d{1,3}/', $stringToParse, $matchOP);
echo "Number of connections: ".sizeof(array_unique($matchOP[0]));

我收到"连接数:xxxxx(IP 的实际计数)。我担心的是我只需要具有 PLAY 状态的 IP 计数。如果该 IP 更改为 STOP,则它不会计数。

试试这个:

$pattern = '~^.* play.* (([0-9]{1,3}'.){3}[0-9]{1,3}).*$~m';
preg_match_all($pattern, $stringToParse, $matches);
echo count($matches[1]) . ' play actions';

它将提取包含文字play的那些行的 IP 地址并对其进行计数。