php最佳方式分析访问日志
我需要分析访问日志,然后将访问者的ip、日期、页面视图或图像视图存储到mysql表中 我计划每分钟使用cron job调用一个php脚本,打开access\u日志 但现在访问日志已经超过了500MB,每分钟将增加约0.4MB。通常是50-350张唱片 那么如何用php打开这么大的文件呢?读取最后500条记录,然后正则表达式获取最后一分钟的记录。我的服务器有32GB内存,内存没有问题,但我需要一个较低的cpu使用率。有人能帮我写一个简单的代码吗?谢谢 编辑 接受@Jeremiah Winsley的建议,我在httpd.conf中使用rotatelogs。但尚未创建任何日志。问题在哪里php最佳方式分析访问日志,php,fopen,access-log,Php,Fopen,Access Log,我需要分析访问日志,然后将访问者的ip、日期、页面视图或图像视图存储到mysql表中 我计划每分钟使用cron job调用一个php脚本,打开access\u日志 但现在访问日志已经超过了500MB,每分钟将增加约0.4MB。通常是50-350张唱片 那么如何用php打开这么大的文件呢?读取最后500条记录,然后正则表达式获取最后一分钟的记录。我的服务器有32GB内存,内存没有问题,但我需要一个较低的cpu使用率。有人能帮我写一个简单的代码吗?谢谢 编辑 接受@Jeremiah Winsley的
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" com bined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined env=!dontlog
CustomLog "|sbin/rotatelogs -f logs/my_log 60" combined env=!dontlog
#create a my_log every 1 minute.
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
SetEnvIf Remote_Addr "::1" dontlog
</IfModule>
不要试图重新发明轮子。始终尝试并搜索其他人可能开发的工具。Web服务器已经存在很长时间了,所以有很多日志解析器和服务器工具 尝试一下这个PHP解析器,为自己节省一些时间
如前所述,我不会在实时文件上这样做。您可能应该每隔5或10分钟设置一个cronjob,并更频繁地旋转文件。并使用最近旋转的文件。但是,这可能会导致大量文件的生成 请提供您当前的代码!这样做是错误的。如果您确实需要自己来处理这些日志,而不是使用日志分析服务,那么您应该使用logrotate with cron以合理的时间间隔解析日志文件,而不是每分钟都试图读取live access日志。@Jeremiah Winsley,如何在logrotate中设置?如果它能节省两次。一个是原始的访问日志,它始终存储日志;每分钟另一个strore访问信息。谢谢可能会有帮助-请注意postrotate设置,您可以在每次旋转脚本时使用它来触发脚本。