真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php按次處理數(shù)據(jù),php計(jì)算字符串中字符出現(xiàn)的次數(shù)

php批量數(shù)據(jù)處理問(wèn)題

沒(méi)看到你的全選按紐呢?

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、城區(qū)網(wǎng)絡(luò)推廣、小程序制作、城區(qū)網(wǎng)絡(luò)營(yíng)銷、城區(qū)企業(yè)策劃、城區(qū)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供城區(qū)建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

不過(guò)這個(gè)問(wèn)題 跟php代碼沒(méi)關(guān)系哈

你先做下靜態(tài)的全選功能吧

PHP多次訪問(wèn)數(shù)據(jù)庫(kù),是否有優(yōu)化方案

我只針對(duì)你這個(gè)做優(yōu)化吧。。

第一個(gè)不要用select * 這樣的sql語(yǔ)句,你需要什么字段就寫哪些字段

都需要的話,你都寫出來(lái),select * 效率很低的。。

第二個(gè)如果說(shuō)你的后臺(tái)中對(duì)這些數(shù)據(jù)的變動(dòng)不是很頻繁

然后你可以將查詢結(jié)果存入memcahe中

我寫一段偽代碼

$mem_key="all";

$res = $memcache-get($mem_key);

//如果沒(méi)有存入memcache中

if (empty($res){

//sql語(yǔ)句可以用left jion on關(guān)聯(lián)查詢

$aaa="select b.字段1,b.字段2...from btb as b left jion tb as b.id=t.id";

$bb=$mysql-_query($aaa);

while(!!$_rows=$mysql-_fetch_array_list($bb)){

//do something

$res ....

}

//結(jié)果存入memecahed中

$memcache-set($mem_key,$res,0,超時(shí)時(shí)間);

}

$res就是你獲取的結(jié)果。。

你這段代碼基本可以這樣。。

php處理數(shù)據(jù)的問(wèn)題

?php

$str = HHH

region=BJ

162.105/16, 166.111/16, 202.4.128/19,

202.112.64/18, 202.112.128/17, 202.113/16, 202.204/14, 210.31/16, 211.68/16, 211.71/16,

211.81/16, 211.82/16, 219.242/16, 219.243.0/17, 219.243.128/18,

219.224.0/17, 219.224.128/18, 219.225/16, 219.226/16, 222.28/14,

222.199/16, 59.64/14, 203.91.120/21, 121.193/16, 121.194/15,

118.228/15, 118.230/16, 121.52.160/19, 115.24/14

region=XA

202.117/16, 202.200/15, 210.26/15, 218.195/16, 219.244/14, 222.23/16, 222.24/15,

59.74/15, 59.76/16, 120.95/16, 115.154/15

region=CD

202.115/16, 202.202/15, 210.40/15, 211.83/16, 218.194/16, 219.221/16, 222.18/15, 222.196/15, 222.198/16, 121.48/15, 120.94/16, 113.54/15

region=GZ

202.38.192/18, 202.116/16, 202.192/15, 210.36/14, 211.66/16, 218.192/16, 219.222/15, 219.227/16,

222.16/15, 222.200/14, 125.216/15, 125.218/16, 116.56/15, 116.13/16,

110.64/15

region=WH

202.114/16, 202.196/15, 210.42/15, 211.69/16, 211.67/16, 211.84/15, 218.196/14, 222.20/15, 222.22/16, 59.68/14,

125.219/16, 125.220/15, 122.204/14, 115.156/15, 115.158/16

region=NJ

202.38.64/19, 202.119/16, 202.194/15, 210.44/15, 210.28/15, 211.64/15, 211.70/16, 211.86/15, 219.218/15, 219.230/15,

222.192/14, 222.206/15, 58.192/15, 121.248/14,

114.212/15, 114.214/16

region=SH

202.120/15, 210.32/14, 211.80/16, 218.193/16, 219.220/16, 219.228/15, 222.204/15, 59.77/16, 59.78/15,

58.198/15, 121.192/16, 111.186/15

region=SY

202.118/16, 202.198/15, 210.46/15, 210.30/16, 219.216/15, 222.26/15, 59.72/15, 125.222/15,

58.154/15, 118.202/15

region=MISC

202.38.96/19, 202.38.140/23, 202.38.184/21, 202.127.216/21, 202.127.224/19, 202.112.0/18, 210.25.128/18,

219.243.192/18, 219.224.192/18, 210.25.0/17

region=CIS

58.194/15, 58.200/13

region=TTN

58.196/15

region=TEIN2

202.179.240/20

HHH;

$reg = '/(?=region=)(\w+)(.+?)(?=region=)/s';

preg_match_all($reg, $str, $matches);

//echo nl2br(var_export($matches, true));

$result = array();

foreach($matches[1] as $key=$val)

{

$header = array("$val");//BJ

$body = explode(',', $matches[2][$key]);//162.105/16, 166.111/16, 202.4.128/19...

$result[] = array_merge($header, $body);//merge array

}

//match last

$str2 = substr($str, strrpos($str, 'region='));

$reg2 = '/(?=region=)(\w+)(.+)/s';

preg_match($reg2, $str2, $matches2);

$tmp = explode(',', $matches2[2]);

array_unshift($tmp, $matches2[1]);

$result[] = $tmp;

echo 'hr';

echo nl2br(var_export($result, true));

?

//換行符不知怎么弄的,就是找不到,所以多出了空格。

求 php 循環(huán)執(zhí)行大量數(shù)據(jù) 解決辦法。

你用網(wǎng)頁(yè)的方式,讓人點(diǎn)擊,服務(wù)器采集,簡(jiǎn)直是弱爆了。每個(gè)人的點(diǎn)擊循環(huán)1000次,來(lái)個(gè)100人同時(shí)點(diǎn),你要用的是普通的虛擬機(jī)就不行了。

最好是換種方式實(shí)現(xiàn),不要通過(guò)網(wǎng)頁(yè)進(jìn)行采集。

可以非常簡(jiǎn)單的在數(shù)據(jù)庫(kù)的表,創(chuàng)建一個(gè)采集隊(duì)列,后臺(tái)執(zhí)行一個(gè)crontab的計(jì)劃任務(wù),去完成隊(duì)列里的采集任務(wù)。

php處理大量數(shù)據(jù)時(shí),運(yùn)行到一定時(shí)間就中斷了,請(qǐng)問(wèn)如何解決

你是cli模式還是cgi模式?cli模式不用設(shè)默認(rèn)就是無(wú)時(shí)間限制,cgi默認(rèn)是有30秒超時(shí)限制。

你可以先看看每次中斷是固定時(shí)長(zhǎng),還是固定次數(shù);也可以多打日志,每次循環(huán)都輸出些參考參數(shù)如循環(huán)條件、內(nèi)存使用等信息,再分析哪些可能導(dǎo)致程序中斷的原因。

php處理大文件文件

我前幾天有一個(gè)面試,面試題就是有這樣一道題。先把自己的思路說(shuō)一下,因?yàn)樾畔⒘糠浅5拇?,所以我采用了分表,分?4張表,每個(gè)小時(shí)一張,雖然凌晨時(shí)刻的表可能很少數(shù)據(jù),但這樣sum字段的問(wèn)題就容易解決了,我理解的sum字段是一個(gè)小時(shí)同一個(gè)用戶在相同的環(huán)境的登陸次數(shù)。這樣理解不知對(duì)否,請(qǐng)網(wǎng)友自行甄辨。然后我通過(guò)PHP中的fgets函數(shù)一行一行的數(shù)據(jù)取出,入表。實(shí)驗(yàn)了幾萬(wàn)條數(shù)據(jù)是沒(méi)有問(wèn)題的,但是上億條數(shù)據(jù)可能夠嗆。這一點(diǎn)也請(qǐng)網(wǎng)友注意,我也是新手。只是看到這里沒(méi)有答案,給大家一個(gè)參考。廢話不多,看流程:

日志文件(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');//主機(jī)名

define(USER,'root');//數(shù)據(jù)庫(kù)賬號(hào)

define(PASS,'111111');//數(shù)據(jù)庫(kù)密碼

define(DBNAME,'test');//所用的數(shù)據(jù)庫(kù)

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('連接數(shù)據(jù)庫(kù)失敗');

//程序中自動(dòng)建庫(kù)和建表,這樣一定程度上拖慢了程序的速度

//創(chuàng)建數(shù)據(jù)庫(kù)

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

if(!mysql_query($crdb)){

die('創(chuàng)建數(shù)據(jù)庫(kù)失敗');

}

//鏈接數(shù)據(jù)庫(kù)

mysql_select_db(DBNAME)?or?die('選擇數(shù)據(jù)庫(kù)失敗');

mysql_set_charset(CHARSET);

//因?yàn)閿?shù)據(jù)量很大我將數(shù)據(jù)按小時(shí)分表,分成24個(gè)表,每小時(shí)一個(gè)表,這樣num字段的值也好做統(tǒng)計(jì)

//數(shù)據(jù)循環(huán)建表

for($i=0;$i24;$i++){

if($i10){

$tbhz='0'.$i;//如果前10張表,表后綴應(yīng)該是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("打開文件失敗");

//對(duì)文件內(nèi)容進(jìn)行循環(huán),直到文件末尾才停止

while?(!feof($file)){

//每次讀取一行

$line?=?fgets($file,1024);

//狀態(tài)是200的進(jìn)行寫入數(shù)據(jù)庫(kù)操作

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

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

$ext=$pinfo['query'];//取得傳遞的各個(gè)參數(shù)

$parray=explode('',$ext);//根據(jù)分解為數(shù)組

//因?yàn)榉纸鉃閿?shù)組后并不是要的值,所以要對(duì)值進(jìn)行一次截取,將等號(hào)及等號(hào)左邊的都去掉

foreach($parray?as?$val){

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

}

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

//截取時(shí)間的秒數(shù)

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

$time=date('Y-m-d?H',$getmun);//將秒數(shù)轉(zhuǎn)化為時(shí)間類型。

//得到表后綴

$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);//執(zhí)行插入

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

die('寫入數(shù)據(jù)庫(kù)失敗');

}

unset($narray);//循環(huán)一次將narray銷毀,為下一次循環(huán)做準(zhǔn)備

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

}

}

fclose($file);//關(guān)閉

//因?yàn)閟um字段還是0,下面代碼段需要處理sum字段的值

//24張表循環(huán)處理

for($i=0;$i24;$i++){

if($i10){

$tbhz='0'.$i;//如果前10張表,表后綴應(yīng)該是00-09

}else{

$tbhz=$i;

}

//該sql語(yǔ)句是把同一個(gè)小時(shí)內(nèi),并且符合條件相等的登陸的總次數(shù)和需要的登陸信息查出,為下面修改sum做準(zhǔn)備

$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";

//發(fā)送查詢sql

$res=mysql_query($sql);

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

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

//修改sum字段,即同一小時(shí)內(nèi)的登陸次數(shù)

$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']}'";

//發(fā)送修改sql,執(zhí)行修改sum

$upres=mysql_query($upsql);

if(!$upres){

die('修改登陸sum失敗');

}

}

}

}

echo?'數(shù)據(jù)成功入表';

使用說(shuō)明:

將配置文件cfg.php中的連接數(shù)據(jù)庫(kù)賬號(hào)、密碼修改為自己本機(jī)的(默認(rèn)新增的庫(kù)名是test)

直接運(yùn)行test1.php


分享標(biāo)題:php按次處理數(shù)據(jù),php計(jì)算字符串中字符出現(xiàn)的次數(shù)
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/hsjshc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部