好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php读取大日志文件 php日志输出

很多站长朋友们都不太清楚php读取大日志文件,今天小编就来给大家整理php读取大日志文件,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 如何用php程序监听一个不断增长的日志文件 2、 如何有效用PHP分析超大日志(2G) 3、 php 一个10g的日志文件如何取出出现次数最多得ip 4、 PHP读取大日志文件,怎么玩 5、 怎么用php读取日志文件?并把需要的字段取出来保存到数据库? 6、 php处理大文件文件 如何用php程序监听一个不断增长的日志文件

一般我们访问一个页面都是输入有url

这时,浏览器发送了一个http请求,请求的内容当然是一个页面

你所说的监听浏览器的请求,与其说是后台脚本在监听,倒不如说是服务器在监听(脚本在服务器上运行),是服务器监听到端口有请求,才去执行相应的脚本程序

一般情况下,我们有2种做法,让后台脚本运行。

1是直接访问该脚本文件(或者说是动态页)

2是ajax请求(实际上也相当于把这个动态页跑了一遍,只不过,不让用户看到)

浏览器访问一个地址时,如果该地址映射的就是一个脚本页的话,则该脚本页就已经开始执行了(即所谓响应浏览器请求),当然前提是,你的服务器配置了可以让php脚本运行的环境,能够让php脚本正常运行

至于监听到请求之后如何处理请求,完全是看你的脚本页是怎么写的,你的php文件写了什么功能,他就执行什么功能

如何有效用PHP分析超大日志(2G)

这个办法可以提高一些效率: 先把结果存在变量里, 全部读取后再存盘.

即把这段代码:

if (fwrite($handle_result, $buffer) === FALSE) {

echo "1 record failed to write into log.

";

}

else

{

echo "1 record susseccful to write into log.

";

}

替换成:

$result .= $buffer . "\r\n";

$i++;

然后在while循环之前加上:

/*初始化变量*/

$result = "";

$i = 0;

在循环结束后加上:

if (fwrite($handle_result, $result) === FALSE) {

echo "Failed to write into log.

";

}

else

{

echo "$i records have been written into log susseccfully.

";

}

php 一个10g的日志文件如何取出出现次数最多得ip

//php直接用file_get_contents去读取10g的文件内存可以会爆,建议使用fgets函数一行一行取

$file = fopen("1.log","r");

while(!feof($file))

{

echo fgets($file). "<br /><br /><br />";

}

fclose($file);

PHP读取大日志文件,怎么玩

应该一行一行进行处理,不能一次加载到内存。

1 $line = '';

2

3 $f = fopen('data.txt', 'r');

4 $cursor = -1;

5

6 fseek($f, $cursor, SEEK_END);

7 $char = fgetc($f);

8

9 /**

10 * Trim trailing newline chars of the file

11 */

12 while ($char === "\n" || $char === "\r") {

13 fseek($f, $cursor--, SEEK_END);

14 $char = fgetc($f);

15 }

16

17 /**

18 * Read until the start of file or first newline char

19 */

20 while ($char !== false $char !== "\n" $char !== "\r") {

21 /**

22 * Prepend the new char

23 */

24 $line = $char . $line;

25 fseek($f, $cursor--, SEEK_END);

26 $char = fgetc($f);

27 }

28

29 echo $line;

怎么用php读取日志文件?并把需要的字段取出来保存到数据库?

这个哪有具体的写法,

1、打开文件(file_get_contents,或其他)

2、正则表达式匹配需要的内容(preg_match,或其他)

3、整理数据保存数据库

php处理大文件文件

我前几天有一个面试,面试题就是有这样一道题。先把自己的思路说一下,因为信息量非常的大,所以我采用了分表,分成24张表,每个小时一张,虽然凌晨时刻的表可能很少数据,但这样sum字段的问题就容易解决了,我理解的sum字段是一个小时同一个用户在相同的环境的登陆次数。这样理解不知对否,请网友自行甄辨。然后我通过PHP中的fgets函数一行一行的数据取出,入表。实验了几万条数据是没有问题的,但是上亿条数据可能够呛。这一点也请网友注意,我也是新手。只是看到这里没有答案,给大家一个参考。废话不多,看流程:

日志文件(access.log)格式:

200 /alipeng.gif?zoneid=2bannerid=44clentid=6materialid=64redirect=http%3a%2f%2f;time=1384444800.832ip=127.0.0.1user_agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48 Safari/537.36utrace=a6dbdd2f6a37b946165b7ae98dcd4f79

502 /alipeng.gif?zoneid=2bannerid=44clentid=6materialid=64redirect=http%3a%2f%2f;time=1384444800.904ip=127.0.0.1user_agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48 Safari/537.36utrace=a6dbdd2f6a37b946165b7ae98dcd4f79

配置文件cfg.php:

    define(HOST,'localhost');//主机名

    define(USER,'root');//数据库账号

    define(PASS,'111111');//数据库密码

    define(DBNAME,'test');//所用的数据库

    define(CHARSET,'utf8');//使用的字符集

具体代码test.php:

<?php

header("content-type:text/html;charset=utf-8");

require './cfg.php';

    $link = mysql_connect(HOST,USER,PASS) or die('连接数据库失败');

//程序中自动建库和建表,这样一定程度上拖慢了程序的速度

//创建数据库

$crdb="create database if not exists ".DBNAME;

if(!mysql_query($crdb)){

die('创建数据库失败');

}

//链接数据库

    mysql_select_db(DBNAME) or die('选择数据库失败');

    mysql_set_charset(CHARSET);

//因为数据量很大我将数据按小时分表,分成24个表,每小时一个表,这样num字段的值也好做统计

//数据循环建表

for($i=0;$i<24;$i++){

if($i<10){

$tbhz='0'.$i;//如果前10张表,表后缀应该是00-09

}else{

$tbhz=$i;

}

$ctbsql="create table if not exists logininfo_{$tbhz}(

id int not null auto_increment primary key,

zoneid int not null default 0,

bannerid int not null default 0,

clentid int not null default 0,

materialid int not null default 0,

redirect char(200) not null default '',

time char(16) not null default '',

user_agent char(200) not null default '',

utrace char(32) not null default '',

sum int not null default 0

)TYPE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";

mysql_query($ctbsql);

}

//打开文件

$file=fopen("./access.log",'r') or die("打开文件失败");

//对文件内容进行循环,直到文件末尾才停止

while (!feof($file)){

//每次读取一行

$line = fgets($file,1024);

//状态是200的进行写入数据库操作

if(preg_match('/^200/',$line)){

$pinfo=parse_url($line);//url信息

$ext=$pinfo['query'];//取得传递的各个参数

$parray=explode('',$ext);//根据分解为数组

//因为分解为数组后并不是要的值,所以要对值进行一次截取,将等号及等号左边的都去掉

foreach($parray as $val){

$narray[]=ltrim(strstr($val,'='),'=');

}

$narray[8]=rtrim($narray[8],'_');

//截取时间的秒数

$getmun=substr($parray[5],5,10);

$time=date('Y-m-d H',$getmun);//将秒数转化为时间类型。

//得到表后缀

$tbhz=date('H',$getmun);

$sql="insert into logininfo_{$tbhz} values(null,'{$narray[0]}','{$narray[1]}','{$narray[2]}','{$narray[3]}','{$narray[4]}','{$time}','{$narray[7]}','{$narray[8]}',0)";

//echo $sql;

$res=mysql_query($sql);//执行插入

if(!$res || !mysql_affected_rows()>0){

die('写入数据库失败');

}

unset($narray);//循环一次将narray销毁,为下一次循环做准备

//var_dump(parse_url($line)['query']);

}

}

fclose($file);//关闭

//因为sum字段还是0,下面代码段需要处理sum字段的值

//24张表循环处理

for($i=0;$i<24;$i++){

if($i<10){

$tbhz='0'.$i;//如果前10张表,表后缀应该是00-09

}else{

$tbhz=$i;

}

//该sql语句是把同一个小时内,并且符合条件相等的登陆的总次数和需要的登陆信息查出,为下面修改sum做准备

$sql="SELECT COUNT('zoneid') AS sum,zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace FROM logininfo_{$tbhz} GROUP BY zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace";

//发送查询sql

$res=mysql_query($sql);

if($res  mysql_num_rows($res)>0){

while($row=mysql_fetch_assoc($res)){

//修改sum字段,即同一小时内的登陆次数

$upsql="update logininfo_{$tbhz} set sum='{$row['sum']}' where zoneid='{$row['zoneid']}' and bannerid='{$row['bannerid']}' and clentid='{$row['clentid']}' and materialid='{$row['materialid']}' and redirect='{$row['redirect']}' and user_agent='{$row['user_agent']}' and utrace='{$row['utrace']}'";

//发送修改sql,执行修改sum

$upres=mysql_query($upsql);

if(!$upres){

die('修改登陆sum失败');

}

}

}

}

echo '数据成功入表';

使用说明:

将配置文件cfg.php中的连接数据库账号、密码修改为自己本机的(默认新增的库名是test)

直接运行test1.php

关于php读取大日志文件的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php读取大日志文件 php日志输出的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did210777
更新时间:2023-05-03   阅读:20次

上一篇: php记录总数 php统计数据库

下一篇:刷流量源码php的简单介绍

相关资讯

最新资料更新

  • 1.php防止ajax接口 php防止接口多次请求
  • 2.下载并安装php 下载并安装央视网
  • 3.php双色球案例 双色球php复式逻辑
  • 4.kohanaphp版本 koo版
  • 5.php系统源代码下载 php源码免费下载
  • 6.php生成uuid php生成随机6位数
  • 7.输出jsonphp代码 js 输出json
  • 8.php数组键名排序 php数组值排序
  • 9.phpflv播放器 php视频播放
  • 10.php网站设计素材 php网站制作
  • 11.php河内塔问题 河内塔算法
  • 12.关于php_ssh.dll的信息
  • 13.中南php哪家好 中南cp
  • 14.php微信爬虫 微信爬虫访问是什么
  • 15.php加密数据用js解密 php加密 js解密
  • 16.php技术网学习 php技术门户
  • 17.phpsql添加记录 php数据表里怎么添加数据
  • 18.php类属性分类 php数据类型
  • 19.php输入日期表单 php输出日历表
  • 20.php下载liunx php下载器

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]