用php解析ip地址

用php解析ip地址,php,parsing,Php,Parsing,我试图通过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

我试图通过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]));
$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时,它有一个播放状态,而不是计数时,它的停止

    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]));
$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数。 我担心的是,我只需要有播放状态的IP数。如果该IP更改为停止,则它将不起作用。

尝试以下操作:

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

echo count($matches[1]) . ' play actions';

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

对不起,我忘了添加日志:如何附加文件?如果要附加日志,则无法在此平台上附加文件。发布该文件的摘录。你只需要计算文件中的IP寄存器,每个示例不到5分钟。我刚刚发布了一段日志,只是为了让大家了解日志结构。目前,你发布的日志不包含ID。它只包含字符串IP_ADDRESS_1和至今。。你能显示真实世界的日志吗?$log=file_get_contents'wowzamediaserver_access.log'$模式='~^.*播放。*[0-9]{1,3}+\.{3,3}[0-9]{1,3}.*$~m';preg_match_all$pattern、$log、$matches;回声计数$matches[1]。'玩动作",;在你复制图案后,我已经更新了图案。再次复制模式,并尝试编辑您的帖子。我添加了$stringToParse=文件“获取”内容“wowzamediaserver\u access.log”;但仍显示0播放操作我已拒绝该编辑,因为添加此行毫无意义,因为读者将不会有该文件。。同样,我已经用您发布的两行输出对它进行了测试,并且效果良好。看来你做错了什么。。。