首页 > 解决方案 > 使用cron的内存限制耗尽运行脚本

问题描述

我在 CodeIgniter 框架中制作了一个如下所示的脚本。

这并没有给我以下错误的确切原因。我已尝试将这个错误作为我的最佳体验来解决。但仍然不太清楚错误。

我知道有可能的解决方案在功能开始时设置在下面的行。但据我所知,这不是很可靠的解决方案。

ini_set("memory_limit", "-1");

致命错误:允许的内存大小为 134217728 字节已用尽(尝试分配 85 字节)

代码 :

function read_data(){
        $fp=fopen("/var/log/test/testdata.log","a+");
        $start_date = "2018-07-12 00:00:00";
        $end_date = "2018-07-31 23:59:59";
        $table = "july_calls";
        $table_prefix = 'custom_';
        $insert_table = 'july_cc_cps';
        $start_date_strtotime = strtotime($start_date);
        $end_date_strtotime = strtotime($end_date);
        $j=0;
        $old_date = strtotime(date("Y-m-d H:i:s",strtotime($start_date .' -1 day')));
        for($i= $start_date_strtotime;$i <= $end_date_strtotime;$i++){
        $table_name = $table_prefix.date("Y_m_d",$i);
        $date = date("Y-m-d",$i);
        $datetime = date("Y-m-d H:i:s",$i);
        if(date("d",$old_date) != date("d",$i)){ 
            $drop_table_query = "DROP TABLE IF EXISTS ".$table_name;
            //fwrite($fp,"Drop table query :".$drop_table_query."\n");
            $this->db->query($drop_table_query);
            $create_table_query ="create table ".$table_name."(
                id varchar(60) NOT NULL,
                userid int(11) NULL DEFAULT 0,
                trunk_id smallint(6) NOT NULL,
                callstart datetime NOT NULL default '0000-00-00 00:00:00',
                callend datetime NOT NULL default '0000-00-00 00:00:00',
                billseconds smallint(6) NOT NULL default 0
            ) ";
            fwrite($fp,"create table query :".$create_table_query."\n");
                    $this->db->query($create_table_query);
                    $insert_data_query = "insert into ".$table_name." select id,userid,trunk_id,callstart,callend,billseconds from ".$table." where callend >= '".$date." 00:00:00' AND callstart <='".$date." 23:59:59' and billseconds > 0 and trunk_id=10";
            //fwrite($fp,"insert data query :".$insert_data_query."\n");
                    $this->db->query($insert_data_query);
                    $before_yesterday_table = $table_prefix.date("Y_m_d",strtotime($datetime.' -2 day'));
                    $drop_old_table_query = "DROP TABLE IF EXISTS ".$before_yesterday_table;
                //fwrite($fp,"drop old table query :".$drop_old_table_query."\n");
                    $this->db->query($drop_old_table_query);
                    $drop_old_table_query = $drop_table_query= $create_table_query = null;
        }
        $insert_array =array();
        $query = "select count(uniqueid) as count,trunk_id from ".$table_name." where callstart <= '".$datetime."' AND callend >='".$datetime."' and trunk_id > 0 and billseconds > 0 and trunk_id=10 group by trunk_id";
        //fwrite($fp,"Trunk query :".$query."\n");
            $trunk_result = $this->db->query($query);
            if($trunk_result->num_rows() > 0 ){
                $trunk_result = $trunk_result ->result_array();
                    foreach($trunk_result as $key=>$value){
                        $insert_array[$i][$value['trunk_id']]['trunk_id'] = $value['trunk_id'];
                        $insert_array[$i][$value['trunk_id']]['asr']=0;
                        $insert_array[$i][$value['trunk_id']]['cc']=$value['count'];
                        $insert_array[$i][$value['trunk_id']]['cps']=0;
                        $insert_array[$i][$value['trunk_id']]['creation_date'] = date("Y-m-d H:i:s",$i);
                        $insert_array[$i][$value['trunk_id']]['userid']=0;
                    }           
            }
            $query = "select count(uniqueid) as count,trunk_id from ".$table_name." where callstart = '".$datetime."' and trunk_id > 0 and trunk_id=10 group by trunk_id";
                //fwrite($fp,"Trunk cps query :".$query."\n");
                $trunk_result = $this->db->query($query);
                if($trunk_result->num_rows() > 0 ){
                    $trunk_result = $trunk_result ->result_array();
                    foreach($trunk_result as $key=>$value){
                if(isset($insert_array[$i][$value['trunk_id']])){
                            $insert_array[$i][$value['trunk_id']]['cps']=$value['count'];
                }else{
                            $insert_array[$i][$value['trunk_id']]['trunk_id']=$value['trunk_id'];
                            $insert_array[$i][$value['trunk_id']]['asr']=0;
                            $insert_array[$i][$value['trunk_id']]['cc']=0;
                            $insert_array[$i][$value['trunk_id']]['cps']=$value['count'];
                            $insert_array[$i][$value['trunk_id']]['creation_date'] = date("Y-m-d H:i:s",$i);
                            $insert_array[$i][$value['trunk_id']]['userid']=0;
                }
                    }
                }
                if(!empty($insert_array)){
                    foreach($insert_array as $key=>$value){
                        foreach($value as $subkey=>$subvalue){
                            $this->db->insert($insert_table,$subvalue);
                        }
                    }
                }
                $old_date = $i;
                $query ="delete from ".$table_name." where callend <= '".$datetime."'";
                $this->db->query($query);
        }
        exit;
    }

标签: phpcodeigniter

解决方案


推荐阅读