Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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_Fopen_Access Log - Fatal编程技术网

php最佳方式分析访问日志

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的

我需要分析访问日志,然后将访问者的ip、日期、页面视图或图像视图存储到mysql表中

我计划每分钟使用cron job调用一个php脚本,打开access\u日志

但现在访问日志已经超过了500MB,每分钟将增加约0.4MB。通常是50-350张唱片

那么如何用php打开这么大的文件呢?读取最后500条记录,然后正则表达式获取最后一分钟的记录。我的服务器有32GB内存,内存没有问题,但我需要一个较低的cpu使用率。有人能帮我写一个简单的代码吗?谢谢

编辑

接受@Jeremiah Winsley的建议,我在httpd.conf中使用rotatelogs。但尚未创建任何日志。问题在哪里

<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设置,您可以在每次旋转脚本时使用它来触发脚本。