用php解析ip地址
我试图通过IP连接和播放状态从日志文件中实时获取活动连接的数量,但相反,它给出了具有播放状态的IP的总数。这个数字根本没有减少。只要添加新的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
$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播放操作我已拒绝该编辑,因为添加此行毫无意义,因为读者将不会有该文件。。同样,我已经用您发布的两行输出对它进行了测试,并且效果良好。看来你做错了什么。。。