问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php文件处理?

发布网友 发布时间:2024-09-26 02:00

我来回答

1个回答

热心网友 时间:2024-10-04 04:06

php文件处理

假设你的数据文件为1,下面的代码测试通过:

?php

??$arr=array();

??foreach?(file('1')?as?$line){

????if?(preg_match('|^M26.*(TS\d+)|',$line,$r))?$arr[$r[1]]++;

??}

??print_r($arr);

?

运行结果为:

Array

(

?[TS716]=1

?[TS722]=2

?[TS717]=1

)

表示M26开头的行中,TS716、TS722、TS717的个数分别是1、2、1

Apache需要将php文件交给PHP解释器处理后再返回给浏览器,那PHP如何运行的呢?

1.我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的;

2.PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口);

3.PHP总共有三个模块:内核、Zend引擎、以及扩展层;

4.PHP内核用来处理请求、文件流、错误处理等相关操作;

5.Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;

6.扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库;

7.当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;

8.最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。

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;$i24;$i++){

if($i10){

$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;$i24;$i++){

if($i10){

$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关于文件处理的问题

我把代码复制下来,新建a.html,复制代码。然后在同一目录下,新建tm.txt,输入:asdsadas保存。然后访问,得出一个表格:

使用readfile()函数读取文件内容:asdsadas

使用file()函数读取文件内容:asdsadas

使用file_get_contents()函数读取文件内容:asdsadas

这代码没问题,你把tm.txt和你的网页放到同一个目录。

关于PHP文件处理的问题

?php

/*

?*?文件夹复制

?*?$fromFile??要复制谁

?*?$toFile????复制到那

?*/

copyFile('./',?'../1');

function?copyFile($fromFile,?$toFile){

creatdir($toFile);

$folder1?=?opendir($fromFile);

while($f1?=?readdir($folder1)){

if($f1!="."??$f1!=".."){

$path2?=?"$fromFile/$f1";

if(is_file($path2)){

$file?=?$path2;

$newfile?=?"$toFile/$f1";

if(file_exists($newfile)){

//重命名

$newfile?=?preg_replace('/(\.\w+$)/i',?'_Rename$1',?$newfile);

}

copy($file,?$newfile);

echo?"$file?=?$newfilebr?/\n";

}elseif(is_dir($path2)){

$toFiles?=?"$toFile/$f1";

copyFile($path2,?$toFiles);

}

}

}

}

//递归创建文件夹

function?creatdir($path){

if(!is_dir($path)){

if(creatdir(dirname($path))){

mkdir($path,0777);

return?true;

}

}else{

return?true;

}

}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
齿瓣延胡索选方 延胡索粉是与开水服用还是与中药服用 延胡索细粉一次吃多少 青少年为什么会得抑郁症 为什么越来越多的青少年抑郁了? 游戏账号重新注册了一个,以前的老号为什么就没有了? 老爸做60大寿,要用手机发信息接朋友呷酒怎么说 老爸做60大寿,要用手机发信息接朋友呷酒怎么写 老爸60大寿请朋友来呷酒用短信通知发些什么 雷克萨斯es200和300的区别 雷克萨斯es200和300的区别哪个好 真正的炎帝陵位于哪个地方? 足协或发最严限薪令,球员工资上限压到了新低,将会产生哪些影响? 熊猫直播宣布破产:这个价值百亿的教训将青史留名 iphone5s 指纹识别用不了,手机屏幕摔坏了,换了个屏幕指纹识别就用不了... 武汉汤姆斯尤博杯的门票是多少钱? 我的苹果5s反回健坏了从新换了一个!然后指纹识别没有用了怎么破解师傅... 中国高考体育800米标准分是多少? 水泵多久更换一次? 请问一月份出生的人是什么星座 中国第一个能真正称得上哲学家的人是谁 中国哲学鼻祖是谁 我是山东考生(理科)考了320 能上菏泽学院吗 还有菏泽学院能专升本吗 是... 梦幻西游宝宝特性怎么洗 继承人办理遗赠扶养协议的规定是什么? 遗赠扶养协议当事人范围是什么? 可以签订遗赠扶养协议的范围是什么? 遗赠扶养协议能由法定继承人签订吗,遗赠扶养协议效力是怎样的?_百度知 ... ...不用注销掉了。请问这个手机号还会再卖出去不?? 如何礼貌的婉拒相亲? 微信号注销了别人再加进来是不是提示没有这个号 伊洛纳农场牧场怎么玩介绍_伊洛纳农场牧场怎么玩是什么 伊洛纳农牧场怎么玩_伊洛纳农牧场玩法攻略 伊洛纳elona农场的作用介绍_伊洛纳elona农场的作用是什么 命令的版记格式与一般公文不同的是: OppvOi华为金立这几款手机那一个质量好耐用 两千元左右的手机哪家强? 现在买什么手机比较好,iphone除外 太纠结了,不知道是买个牌子好的,还是... 如今国产哪款手机最好用 我该选择做招聘专员还是做销售呢? ps3游戏什么格式?昨天才买,在店里安装了游戏,自己下载游戏怎么安装... 汉维百维和星鲨是一个品牌吗 英雄联盟手游蔚怎么出装-lol手游蔚出装推荐 LOL蔚灵能特工皮肤介绍 lol蔚是哪个 lol中蔚的连招怎么发 昨晚梦见我送了别人二百元的人情。 《百岁之好一言为定》各人物大结局是什么 蒋正寒和夏林希在一起了吗 区块链作业答案是什么? 苹果换华为如何迁移数据?三种方法教你轻松实现! WPS制作的PPT文件在office2010打开时格式混乱