CSV->exel->odbc->数据库怎么查,这玩意就怎么查

解决方案 »

  1.   

    SORRY,没看清要求。
    记得使用WEBTRENDS分析WEB SERVER LOG的时候,好象它都会先生成一个自有格式的数据库,然后再读这个数据库来做分析报告,不知道我记得对不对。直接文本分析的效率……100W条……汗……
      

  2.   

    在写文件之前用pack(),
    $format=A20A10;
    pack($format,$data1,$data2)
    -------------------------------
    读取出来再unpack()
    $format=A20data1/A10data2;
    $mydata=unpack($format,$yourdata)
    echo $mydata['data1']
    echo $mydata['data2']
    这样会不会操作简单一点呢。
    又或是今天第一个人访问时,把数据放进临时表,然后所有人再在这个临时表上操作。
    只是提供个思路,不知可行性。等楼主有了结果,再告诉大家怎么样做吧。
      

  3.   

    用xml来实现,思路考虑中……
      

  4.   

    uGain(uGain.org)所言极是。虽然不是很好的方法,但总想还是应该可以解决。
    主要是想知道如何解决的细节问题。感谢 lisoon((水翡草芥--突然想去扫街)) 提供思路,马上去试试看。to:kangqin(小康),这个日志文件,是应用程序生成的,还没有WEBTRENDS生成的那样复杂。应为大小不固定,所以想暂时用文本来操作。
    另:100w的文本,一条条读进来,在页面上显示一下,分个页,不搞其它的,应该还可以吧?不知具体的操作细节是什么?能提示一下么?
      

  5.   

    to:joe25525(昨日§梦醒℃)  愿闻其详。
      

  6.   

    另:100w的文本,一条条读进来,在页面上显示一下,分个页,不搞其它的,应该还可以吧?不知具体的操作细节是什么?能提示一下么?用file()把文本赋到数组里,用下标来操作,就像数据库里的id一样。http://www.hr-salon.com/uGain/stat.php
    这是给一个人气还可以的论坛做的统计,用文本保存数据。
    不过13w条数据,已经很难操作,效率很低,所以在找到更高效的文本操作方法之前,还是不推荐用文本。
      

  7.   

    stat.php 这个是file()一次读入的么?然后,按加入时间倒序?file()的文本太大,一般都会报错(Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 79 bytes))。看来,除非是学习,否则用文本来处理,实在是没有什么意义。
      

  8.   

    uGain(uGain.org)兄对多条件组合查询,有什么好的建议?
      

  9.   

    stat.php的代码,方便看一些么?不胜感激!
      

  10.   

    <?php
    /* 
    Easy Site Stat By uGain 
    Document Format : 202.107.96.68→浙江省杭州市→http://www.ugain.org/stat.php→/index.php→MSIE 6.x→2004-11-11 23:50:13
    */$filename='stat.uGain'; // name of the file where content saved
    $perpage='20'; // how many pieces display per page
    $fontcolor='#000000'; // font color
    $bordercolor='#CCCCCC'; // color of table's border
    $bgcolor='#FFFFFF'; // color of table's background
    $ippath='ip.txt'; // when $usesmile set to 1, u must set the path of imagesfunction WriteFile($filename, $content, $method='w'){
    $fp=@fopen($filename, $method);
    @flock($fp, LOCK_EX);
    @fputs($fp, $content);
    fclose($fp);
    }
    function GBsubstr($string, $start, $length) {
    if(strlen($string)>$length){
    $str=null;
    $len=$start+$length;
    for($i=$start;$i<$len;$i++){
    if(ord(substr($string,$i,1))>0xa0){
    $str.=substr($string,$i,2);
    $i++;
    }else{
    $str.=substr($string,$i,1);
    }
    }
    return  $str.'...';
    }else{
    return $string;
    }
    }
    function ShortDisplay($string, $start, $length){
    if(strlen($string)<=$length) return $string;
    else {
    $str=GBsubstr($string, $start, $length);
    return '<div title="'.$string.'" onclick="if(this.innerHTML.replace(/[.]+/g,\'\').replace(/[^\x00-\xff]/g,\'uG\').length<='.($length+2).') this.innerHTML=\''.$string.'\'; else this.innerHTML=\''.$str.'\';">'.$str.'</div>';
    }
    }
    function GetDomain($url){
    return preg_replace('/http\:\/\/([a-zA-Z\.0-9\-]+)\/.*/i', '\\1', $url);
    }
    function ip2location($ip, $ip2locationarray){
    if(ereg("^192[\.]+", $ip)) return "局域网IP";
    if(ereg("^127[\.]+", $ip)) return "本机IP";
    $formatip=null;
    $tmp=explode('.', $ip);
    for($i=0;$i<4;$i++){
    $tmp[$i]=sprintf('%03d', $tmp[$i]);
    }
    $newip=join('.', $tmp);
    $a=0;
    $b=sizeof($ip2locationarray);
    while($a<$b-1) {
    $r=floor(($a+$b)/2);
    $ipfilevar=explode(",",$ip2locationarray[$r]);
    if(strcmp($newip,$ipfilevar[0])>=0&&strcmp($newip,$ipfilevar[1])<=0){
    $location=trim($ipfilevar[2]).trim($ipfilevar[3]).trim($ipfilevar[4]).trim($ipfilevar[5]);
    break;
    }
    if(strcmp($newip,$ipfilevar[0])>0) $a=$r;
    else $b=$r;
    if(!($a<$b-1)) $location="未知地区";
    }
    return $location;
    }
    function getbrower($str){
    if(eregi("NetCaptor", $str)) return "NetCaptor";
    elseif(eregi("MSIE 6", $str)) return "MSIE 6.x";
    elseif(eregi("MSIE 5", $str)) return "MSIE 5.x";
    elseif(eregi("MSIE 4", $str)) return "MSIE 4.x";
    elseif(eregi("Netscape", $str)) return "Netscape";
    elseif(eregi("Opera", $str)) return "Opera";
    else return "other";
    }
    ?>
    <style type="text/css">
    a { font-size: 9pt; color: <?php echo $fontcolor; ?>; text-decoration: none}
    a:hover {  font-family: "宋体"; font-size: 9pt; color: #FF2200; text-decoration: none}
    a:visited {  font-family: "宋体"; font-size: 9pt; color: <?php echo $fontcolor; ?>; text-decoration: none}
    </style>
      

  11.   

    <?php
    $listmenuarray=array('ip', 'location', 'from', 'visit', 'brower');
    $statstr='<tr bgcolor="'.$bgcolor.'"><td align="right"><b>统计:</b></td><td colspan="6"><a href="'.$PHP_SELF.'?section=stat&param=ip">按IP</a> <a href="'.$PHP_SELF.'?section=stat&param=location">按地区</a> <a href="'.$PHP_SELF.'?section=stat&param=from">按来源</a> <a href="'.$PHP_SELF.'?section=stat&param=visit">按访问</a> <a href="'.$PHP_SELF.'?section=stat&param=brower">按浏览器</a> <a href="'.$PHP_SELF.'?section=stat&param=year">按时间(年)</a> <a href="'.$PHP_SELF.'?section=stat&param=month">按时间(月)</a> <a href="'.$PHP_SELF.'?section=stat&param=date">按时间(天)</a> <a href="'.$PHP_SELF.'?section=stat&param=hour">按时间(小时)</a> <div align="right"><b><a href="'.$PHP_SELF.'?section=list">查看统计列表</a></b></div></td></tr>';
    if($section=='list'){
    $href=$PHP_SELF.'?section='.$section;
    if($orderby) $href.='&orderby='.$orderby;
    $file=@file($filename)?@file($filename):array();
    foreach($listmenuarray as $kk=>$vv){
    if($orderby==$vv){
    $file2=array_merge($file, array());
    foreach($file2 as $k=>$v){
    if($file2[$k]){
      $tmp=explode('→', $file2[$k]);
      $tmp2[$k]=$tmp[$kk];
    }
    }
    asort($tmp2);
    unset($file);
    foreach($tmp2 as $k=>$v){
    $file[]=$file2[$k];
    }
    }
    }
    $totalpage=ceil(count($file)/$perpage);
    if(!$page or $page<1) $page=1;
    if($page>$totalpage) $page=$totalpage;
    $cnt=count($file)-($page-1)*$perpage;
    $cnt2=count($file)-$page*$perpage;
    echo '<table border="0" width="80%" align="center" cellpadding="4" cellspacing="1" bgcolor="'.$bordercolor.'" style="color:'.$fontcolor.';font-size:9pt">';
    echo $statstr;
    echo '<tr bgcolor="'.$bgcolor.'" align="center"> <td><b>序号</b></td> <td><b><a href="'.$href.'&orderby=ip">IP</a></b></td> <td><b><a href="'.$href.'&orderby=location">地区</a></b></td> <td><b><a href="'.$href.'&orderby=from">来源</a></b></td> <td><b><a href="'.$href.'&orderby=visit">访问</a></b></td> <td><b><a href="'.$href.'&orderby=ip">浏览器</a></b></td> <td><b><a href="'.$href.'&orderby=time">时间</a></b></td> </tr>';
    for($i=$cnt;$i>$cnt2;$i--){
    if($file[$i]){
      $tmp=explode('→', $file[$i]);
      echo '<tr bgcolor="'.$bgcolor.'"> <td>'.$i.'</td> <td>'.$tmp[0].'</td> <td>'.$tmp[1].'</td> <td>'.ShortDisplay($tmp[2], 0, 20).'</td> <td>'.ShortDisplay($tmp[3], 0, 25).'</td> <td>'.$tmp[4].'</td> <td>'.$tmp[5].'</td></tr>';
    }
    }
    echo '<tr bgcolor="'.$bgcolor.'"><td colspan="7" align="right">';
    if($page>1) echo '<a href="'.$href.'&page='.($page-1).'">上一页</a> ';
    if(count($file)>$perpage){
    echo '<a href="'.$href.'&page='.($page+1).'">下一页</a> ';
    }
    echo '</td></tr>';
    echo '<tr bgcolor="'.$bgcolor.'"><td colspan="7" align="center">统计开始时间:'.(substr($file[0], strrpos($file[0], '→')+2)).' 当前时间:'.date('Y-m-d H:i:s').'</td></tr>';
    echo '</table>';
    }elseif($section=='stat'){
    $file=@file($filename)?@file($filename):array();
    echo '<table border="0" width="80%" align="center" cellpadding="4" cellspacing="1" bgcolor="'.$bordercolor.'" style="color:'.$fontcolor.';font-size:9pt">';
    echo $statstr;
    echo '<tr bgcolor="'.$bgcolor.'" align="center"> <td><b>序号</b></td> <td><b>统计值</b></td> <td><b>统计次数</b></td> <td><b>百分比</b></td> <td width="400"><b>图示</b></td> </tr>';
    foreach($listmenuarray as $kk=>$vv){
    if($param==$vv){
    foreach($file as $k=>$v){
    if($file[$k]){
      $tmp=explode('→', $file[$k]);
      if(@in_array($tmp[$kk], @array_flip($tmp2))) $tmp2[$tmp[$kk]]++;
      else $tmp2[$tmp[$kk]]=1;
    }
    }
    $total=array_sum($tmp2);
    ksort($tmp2);
    $i=1;
    foreach($tmp2 as $k=>$v){
    echo '<tr bgcolor="'.$bgcolor.'"> <td>'.$i.'</td> <td>'.($k?$k:'无').'</td> <td>'.$v.'</td> <td>'.round($v*100/$total, 2).'%</td><td> <hr color="red" size="5" align="left" width="'.($v*400/$total).'"></td></tr>';
    $i++;
    }
    }
    }
    if($param=='year' or $param=='month' or $param=='date' or $param=='hour'){
    foreach($file as $k=>$v){
    if($file[$k]){
      $tmp=explode('→', $file[$k]);
      $year=substr($tmp[5], 0, 4);
      $month=substr($tmp[5], 0, 7);
      $date=substr($tmp[5], 0, 10);
      $hour=substr($tmp[5], 0, 13);
      if(@in_array($year, @array_flip($tmp2))) $tmp2[$year]++;
      else $tmp2[$year]=1;
      if(@in_array($month, @array_flip($tmp3))) $tmp3[$month]++;
      else $tmp3[$month]=1;
      if(@in_array($date, @array_flip($tmp4)) and substr($date, 0, 7)==date('Y-m')) $tmp4[$date]++;
      elseif(substr($date, 0, 7)==date('Y-m')) $tmp4[$date]=1;
      if(@in_array($hour, @array_flip($tmp5)) and substr($hour, 0, 10)==date('Y-m-d')) $tmp5[$hour]++;
      elseif(substr($hour, 0, 10)==date('Y-m-d')) $tmp5[$hour]=1;
    }
    }
    if($param=='year'){
    $total=array_sum($tmp2);
    ksort($tmp2);
    $i=1;
    foreach($tmp2 as $k=>$v){
    echo '<tr bgcolor="'.$bgcolor.'"> <td>'.$i.'</td> <td>'.$k.'</td> <td>'.$v.'</td> <td>'.round($v*100/$total, 2).'%</td><td> <hr color="red" size="5" align="left" width="'.($v*400/$total).'"></td></tr>';
    $i++;
    }
    }
    if($param=='month'){
    $total=array_sum($tmp3);
    ksort($tmp3);
    $i=1;
    foreach($tmp3 as $k=>$v){
    echo '<tr bgcolor="'.$bgcolor.'"> <td>'.$i.'</td> <td>'.$k.'</td> <td>'.$v.'</td> <td>'.round($v*100/$total, 2).'%</td><td> <hr color="red" size="5" align="left" width="'.($v*400/$total).'"></td></tr>';
    $i++;
    }
    }
    if($param=='date'){
    $total=array_sum($tmp4);
    ksort($tmp4);
    $i=1;
    foreach($tmp4 as $k=>$v){
    echo '<tr bgcolor="'.$bgcolor.'"> <td>'.$i.'</td> <td>'.$k.'</td> <td>'.$v.'</td> <td>'.round($v*100/$total, 2).'%</td><td> <hr color="red" size="5" align="left" width="'.($v*400/$total).'"></td></tr>';
    $i++;
    }
    }
    if($param=='hour'){
    $total=array_sum($tmp5);
    ksort($tmp5);
    $i=1;
    foreach($tmp5 as $k=>$v){
    echo '<tr bgcolor="'.$bgcolor.'"> <td>'.$i.'</td> <td>'.$k.'</td> <td>'.$v.'</td> <td>'.round($v*100/$total, 2).'%</td> <td> <hr color="red" size="5" align="left" width="'.($v*400/$total).'"></td></tr>';
    $i++;
    }
    }
    }
    echo '</table>';
    }else{
    $file=@file($filename)?@file($filename):array();
    $ip2locationarray=@file($ippath)?@file($ippath):array();
    $ip=$REMOTE_ADDR;
    $location=ip2location($ip, $ip2locationarray);
    $from=GetDomain($HTTP_REFERER);
    $visit=$PHP_SELF;
    $brower=getbrower($HTTP_USER_AGENT);
    $time=date('Y-m-d H:i:s');
    $content=$ip.'→'.$location.'→'.$from.'→'.$visit.'→'.$brower.'→'.$time."\n";
    WriteFile($filename, $content, 'a+');
    echo '<a href="'.$PHP_SELF.'?section=list">查看统计列表</a>';
    }
    ?>