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

Php 如何在数据库中存储此日志数据

Php 如何在数据库中存储此日志数据,php,mysql,logging,Php,Mysql,Logging,我有一个来自防火墙的日志文件,我想用php将它存储在mysql数据库中,我对数据库使用了相同的键,我想以数组key=value格式分离日志数据,并且每个键值之间都有空格,还有一些国家的国名之间有空格。那么我怎样才能完成我的任务呢。在这里,您可以看到日志文件: date=2016-04-11 time=11:26:29 logid=0000000013 type=traffic subtype=forward level=notice vd=root srcip=10.10.24.232 sr

我有一个来自防火墙的
日志文件
,我想用
php
将它存储在
mysql
数据库中,我对数据库使用了相同的键,我想
数组key=value
格式分离日志数据,并且每个键值之间都有
空格
,还有一些国家的国名之间有空格。那么我怎样才能完成我的任务呢。在这里,您可以看到日志文件:

 date=2016-04-11 time=11:26:29 logid=0000000013 type=traffic
 subtype=forward level=notice vd=root srcip=10.10.24.232 srcport=35321
 srcintf="port2" dstip=173.252.74.22 dstport=443 dstintf="wan1"
 poluuid=426a22f0-b2d8-51e5-4e06-b3d158ed335f sessionid=11469008
 proto=6 action=deny policyid=33 dstcountry="United States"
 srccountry="Reserved" trandisp=snat transip=202.166.220.127
 transport=35321 service="HTTPS" appid=15832 app="Facebook"
 appcat="Social.Media" apprisk=medium applist="GEN-ACC-FBBLK"
 appact=drop-session duration=22 sentbyte=120 rcvdbyte=60 sentpkt=2
 utmaction=block countapp=1 utmref=62972-2591658 date=2016-04-11
 time=11:26:29 logid=0000000013 type=traffic subtype=forward
 level=notice vd=root srcip=10.10.37.60 srcport=43857 srcintf="port2"
 dstip=202.166.193.187 dstport=443 dstintf="wan1"
 poluuid=426a22f0-b2d8-51e5-4e06-b3d158ed335f sessionid=11373387
 proto=6 action=close policyid=33 dstcountry="Nepal"
 srccountry="Reserved" trandisp=snat transip=202.166.220.127
 transport=43857 service="HTTPS" appid=41542 app="SSL_TLSv1.0"
 appcat="Network.Service" apprisk=medium applist="GEN-ACC-FBBLK"
 appact=detected duration=424 sentbyte=1320 rcvdbyte=1582 sentpkt=10
 rcvdpkt=16 utmaction=allow countapp=2 utmref=62972-2591632

最后,我可以自己纠正它,我希望它也能帮助其他人:

$str = file_get_contents($_FILES["file"]["tmp_name"]);
$str1 = str_replace("\"", "", ($str) );

$vals=split('date=', $str1);
array_shift($vals);

$finalArray = array();
$j = 0;
foreach($vals as $v){
    $finalArray[$j]["date"] = substr($v, 0, 10);
    //var_dump($v);
    $tempString = substr($v, 11);

    $tempArr = explode(" ", $tempString);
    $prevTemp = "";
    foreach($tempArr as $i){
        $tmp = explode("=",$i);
        if(!isset($tmp[1])){
            $finalArray[$j][$prevTemp] = $finalArray[$j][$prevTemp]." ".$i;
        }
        else{
            $finalArray[$j][$tmp[0]] = isset($tmp[1]) ? $tmp[1]: '';
            $prevTemp = $tmp[0];
        }

    }
    $j++;
}
//var_dump($finalArray);
//die();


$totalQuery = '';
foreach($finalArray as $val){
    if(is_array($val)){
        $queryText = 'INSERT INTO `intrulog` SET';
        $i = 0;
        foreach($val as $k=>$v){
            if(isset($v) && !empty($v)){
                if($i)
                    $queryText .= ',';
                $queryText .= " `{$k}` = '{$v}' ";
                $i++;
            }
        }
        $queryText .= ";<br>";

        $totalQuery .= $queryText; 
    }
}
//echo $queryText;
}
$str=file\u get\u contents($\u FILES[“file”][“tmp\u name”]);
$str1=str\u替换(“\”、“,($str));
$VAL=split('date=',$str1);
数组移位($VAL);
$finalArray=array();
$j=0;
foreach(VAL为$v){
$finalArray[$j][“日期”]=substr($v,0,10);
//var_dump(五美元);
$tempString=substr($v,11);
$tempArr=explode(“,$tempString”);
$prevTemp=“”;
foreach($i的临时成本){
$tmp=爆炸(“=”,$i);
如果(!isset($tmp[1])){
$finalArray[$j][$prevTemp]=$finalArray[$j][$prevTemp]。“”.$i;
}
否则{
$finalArray[$j][$tmp[0]]=isset($tmp[1])?$tmp[1]:'';
$prevTemp=$tmp[0];
}
}
$j++;
}
//var_dump($finalArray);
//模具();
$totalQuery='';
foreach($finalArray作为$val){
if(is_数组($val)){
$queryText='插入'intrulog'SET';
$i=0;
foreach($val为$k=>$v){
如果(设置($v)和(&!空($v)){
如果有的话(一美元)
$queryText.=',';
$queryText.=“{$k}`='{$v}'”;
$i++;
}
}
$queryText.=“;
”; $totalQuery.=$queryText; } } //echo$queryText; }
好的,那么你的问题是什么?你尝试过什么吗?告诉我们你尝试过什么,然后我们将能够帮助你改进/修复你的代码。我先用explode函数尝试过,但没有得到我需要的,你可以尝试读取日志文件。然后给我们看这个代码。告诉我们你得到的不是你期望的。你给我们看的日志,呵呵你是用php写的吗?是用变量写的吗?是字符串写的吗?是数组写的吗?简而言之,给我们更多的信息!这是一个日志文件,我手动上传它作为记录,因为我已经发布了上面问题中的日志示例,我只是用它来分解它,但我没有得到正确的格式。我想做的是我将日期设为字段名,值设为value也在数据库中。