如何在php中循环通过具有公共模式的文件的多个块

如何在php中循环通过具有公共模式的文件的多个块,php,loops,Php,Loops,我设计了一个从日志文件中获取数据并上传到数据库的代码。我能够连接到数据库。当我有一个帖子块时,这段代码运行良好。但是,当我的文件包含多个POST块时,它会替换以前的数据并上载最后一个块数据。有人可以帮助我如何循环我的代码来分别上传每个帖子块吗。 我的代码: 您只需要将数据库插入部分移动到foreach循环中 非常感谢您的帮助: <?php class logAgent { const CONFIG_FILENAME = "data_config.ini"; privat

我设计了一个从日志文件中获取数据并上传到数据库的代码。我能够连接到数据库。当我有一个帖子块时,这段代码运行良好。但是,当我的文件包含多个POST块时,它会替换以前的数据并上载最后一个块数据。有人可以帮助我如何循环我的代码来分别上传每个帖子块吗。 我的代码:


您只需要将数据库插入部分移动到foreach循环中


非常感谢您的帮助:
<?php
class logAgent
{
    const CONFIG_FILENAME = "data_config.ini";

    private $_dbConn;
    private $_config;

    function __construct()
    {
        $this->_loadConfig();


        $this->_dbConn = oci_connect($this->_config['db_usrnm'],
            $this->_config['db_pwd'],
            $this->_config['hostnm_sid']);
    }

    public function uploadLogs(){

        //Array of all the files present in the directory
        $f = fopen($this->_config['uploadedRegistry'], 'r');
        $contents = [];
        while (FALSE !== ($row = fgetcsv($f, 1000, $this->_config['filenameTimeSeparator']))){
            $contents[] = $row[0];
        }

        $result = array_diff(scandir($this->_config['logspath']), ['.','..'], $contents);
        foreach($result as $r){
            $this->uploadLog($r);
        }
    }

    private function _loadConfig()
    {
        // Loads config
        $path = dirname(__FILE__) . '/' . self::CONFIG_FILENAME;
        $this->_config = parse_ini_file($path) ;
    }
    public function uploadLog($filename) {

        $filename = trim($this->_config['logspath'] . trim($filename));

        if(file_exists($filename)){

            $fh = fopen($filename,"r");
            $array = array();
            $started = false;

            while (!feof($fh)) {
                $line = trim(fgets($fh));
                if($started) {


                    if(!ctype_space($line)&&!empty($line)&&!preg_match('#-$#',$line)){
                if(strpos($line,'POST')===0){
                    $data=array_map('trim',str_getcsv($line,' ',''));
                    $temp['POST']=array_slice($data,1,2);
                }
                elseif(strpos($line,'GET')===0){
                    $data=array_map('trim',str_getcsv($line,' ',''));
                    $temp['GET']=array_slice($data,1,2);
                }
                else{
                    if(isset($A)){
                        $data=array_map('trim',str_getcsv($line,' ',''));
                        $data[0].=$data[1];
                        unset($data[1]);
                        $temp['Stamp']=array_combine(['REQUEST_TIME','text','IP_ADDRESS','port','ip','s_i'],$data);
                        unset($A);
                    }else{

                        $data=array_map('trim',str_getcsv($line,':',''));
                        if(isset($data[1])){
                            if($data[0]=='Keep-Alive'){
                                $d=explode(',',$data[1]);
                                $d[0]=array_map('trim',explode('=',$d[0]));
                                $d[1]=array_map('trim',explode('=',$d[1]));
                                $temp[$data[0]]=[$d[0][0]=>$d[0][1],$d[1][0]=>$d[1][1]];
                            }else{
                                $temp[$data[0]]=$data[1];
                            }
                        }elseif(strpos($data[0],'HTTP')===0){
                            $data=explode(' ',$data[0]);
                            $temp['HTTP']=array_combine(['version','status','message'],$data);
                        }else{
                            $temp['Query_string']=$data[0];
                        }
                    }
                }
         }


        if(strpos($line, "--") === 0 && strpos($line, "-Z-") > 0) {
            $started = false;
            $array[$tmp] = $temp;
            $temp=[];
            $tmp++;
        }
      }
      if(strpos($line, "--") === 0 && strpos($line, "-A-") > 0) {
        $A=true;
        $started = true;
        $tmp=trim($line);
        $temp=[];
      }
    }
    fclose($fh);

        foreach($array as $k=>$value){
            if(isset($value["POST"])){

                $CLIENT_REQUEST = $value['POST'][0];
                $IP_ADDRESS = ($value['Stamp']['IP_ADDRESS']);
                $tmp1 = explode('+', ($value['Stamp']['REQUEST_TIME']));
                $REQUEST_TIME = (str_replace('[', '',$tmp1[0]));
                $X_REQUESTED_WITH =($value['X-Requested-With']);
                $RESPONSE_CODE = ($value['HTTP']['status']);
                $TANUSER = ($value['tanuser']);
                $COOKIES = ($value['cookie']);
                $tmp = explode(';', ($value['cookie']));
                $AUTHSCHEME = (str_replace('authscheme=','', $tmp[0]));
                $AUTHMARKET = (str_replace('authMarket=','', $tmp[1]));
                $SIZEOFOBJECT = ($value['Content-Length']);
                $ENV = ($value['env']);
                $OUTPUT_DATA = ($value['Query_string']);
                $statement = "INSERT INTO AUDIT_LOGS(IP_ADDRESS, 
                        REQUEST_TIME, 
                        CLIENT_REQUEST,
                        RESPONSE_CODE,
                        SIZEOFOBJECT,
                        COOKIES, 
                        AUTHSCHEME,
                        AUTHMARKET,
                        X_REQUESTED_WITH,
                        ENV,
                        TANUSER, 
                        OUTPUT_DATA) 
                        values(:IP_ADDRESS,to_date(:REQUEST_TIME, 'DD/Mon/YYYY:HH24:MI:SS' ) , :CLIENT_REQUEST, :RESPONSE_CODE , :SIZEOFOBJECT, :COOKIES, :AUTHSCHEME, :AUTHMARKET, :X_REQUESTED_WITH, :ENV, :TANUSER, :OUTPUT_DATA )";

                //Preparing an Oracle statement for execution
                $compiled = oci_parse($this->_dbConn, $statement);

                //binding values to named parameters

                oci_bind_by_name($compiled, ':IP_ADDRESS', $IP_ADDRESS);
                $REQUEST_TIME = str_replace('"', '', $REQUEST_TIME);
                oci_bind_by_name($compiled, ':REQUEST_TIME', $REQUEST_TIME);
                oci_bind_by_name($compiled, ':CLIENT_REQUEST', $CLIENT_REQUEST);
                oci_bind_by_name($compiled, ':RESPONSE_CODE', $RESPONSE_CODE);
                oci_bind_by_name($compiled, ':SIZEOFOBJECT', $SIZEOFOBJECT);    
                oci_bind_by_name($compiled, ':COOKIES', $COOKIES);  
                oci_bind_by_name($compiled, ':AUTHSCHEME', $AUTHSCHEME);
                oci_bind_by_name($compiled, ':AUTHMARKET', $AUTHMARKET);    
                oci_bind_by_name($compiled, ':X_REQUESTED_WITH', $X_REQUESTED_WITH);
                oci_bind_by_name($compiled, ':ENV', $ENV);  
                oci_bind_by_name($compiled, ':TANUSER', $TANUSER);
                oci_bind_by_name($compiled,':OUTPUT_DATA', $OUTPUT_DATA);

                //Executing statement
                oci_execute($compiled, OCI_COMMIT_ON_SUCCESS);

            }elseif(isset($value["GET"])){
                //var_dump($value['tanuser']);
            }
        }


            //$this->updateRegistry($filename);
            return TRUE;
        }   
        else{
                throw new Exception("File doesnot exist");
            }
    }

    public function sendEmail(Exception $e){

        $sent = mail($this->_config['recipients'], $this->_config['notificationSubject'], $e);
    }

    public function updateRegistry($filename)
    {

        $uploadedfilename = fopen($this->_config['uploadedRegistry'], "a");
        fwrite($uploadedfilename, basename($filename . date($this->_config['filenameTimeSeparator'] . 'Ymdhi', time())) . PHP_EOL);
    } 
}

try {
    $logAgent = new logAgent();
    $logAgent->uploadLogs();
}
catch (Exception $e) {
    $logAgent->sendEmail($e);
}
?>