Есть ли способ, чтобы php cornjob не занимал слишком много памяти - PullRequest
0 голосов
/ 27 июня 2019

Я получаю балансовые транзакции из Stripe API и сохраняю их в свою базу данных с помощью Cornjob, и Cornjob запускается через две минуты.Теперь я столкнулся с проблемой, так как она потребляет слишком много памяти в течение часа.

Вот мой код Stripe и PHP, где я закрываю соединение с базой данных и выхожу из цикла for-each, чтобы остановить утечку памяти.

function index(){
    set_time_limit(0);  
    $DB=$this->load->database('testing', true);
    $sql="SELECT stripeKey FROM app_key";
    $qry=$DB->query($sql);
    $keys= $qry->result_array();
    $DB->close();

    if(is_array($keys) && count($keys)>0){
       foreach($keys as $k){
         if($k['stripeKey']!=''){
             try {                      
                   $this->stripelib->getStripe()->setApiKey($k['stripeKey']);

               $this->callApi();

              }catch(\Stripe\Error\Card $e) {

                $messages[] = $this->stripeErrorMsg($e);

              }
         }
       }
    }   
}

function callApi(){

    $balance = $this->stripelib->getBalanceTransaction()->all(
        array(
                'limit'   => 100,
                'created' => array(
                    'gte' => strtotime('-1 day 00:00'),
                    'lte' => strtotime('1 day 23:59') 
                )
            )
        );

    foreach ($balance->data as $bl){
      //echo $bl->id . " created " . date("d-m-y", $bl->created) . "<br>";
    }
    $this->addRecord($balance->data);

    while ($balance->has_more){
        $balance = $this->stripelib->getBalanceTransaction()->all(
        array(
            "limit" => 100,
            "created" => array(
                "gte" => strtotime('-1 day 00:00'),
                'lte' => strtotime('1 day 23:59')
                ), 
            "starting_after" => $bl->id)
        );

        foreach ($balance->data as $bl){
          //echo $bl->id . " created " . date("d-m-y", $bl->created) . "<br>";
        }
        $this->addRecord($balance->data);

    }   
}

function addRecord($data)
{
    $i=0; 
    fee1=0.00;
    $DB=$this->load->database('testing', true);
    $DB2=$this->load->database('testing2', true);

    if(is_array($data) && count($data)>0){
        foreach($data as $b){
            $i++;

            if($b['description']!='' )
            {

                $sql="SELECT fee FROM my_app WHERE description='".$b['description']."' ";
                $qry=$DB->query($sql);
                $cs= $qry->row_array(); 


                if(is_array($cs) && count($cs)>0){
                    $fee1=$cs['fee'];
                }   
            }



            $fee2=0.00;
            ANOTHER MQSQL QUERY - FETCHING ONLY 5 RECORDS

            $chrg= $this->stripelib->getCharge()->retrieve($b['source']);               $chrgType=$payment['payment_method_details']->type; 

            $rendA = $this->stripelib->getRefund()->retrieve($b['source']); 
            $refund_reason=$rendA ['reason'];   


            $sql="INSERT IGNORE INTO `transactions`(`id`, `fee`, `refund_reason`, `payment_type`) VALUES 
            ('".$b['id']."', '".fee1."', '".$refund_reason."' , '".$paymentType."' )";

            $query = $DB2->query($sql);



            if(count($data)==$i){
                exit;
            }

        }

    }


    $DB->close();
    $DB2->close();
}

В логе я получил это - 27 / Jun / 2019: 08: 59: 42 +0100] "ОПЦИИ / проверка HTTP / 1.0" 200 - "-" "-"

Как и что я должен сделать, чтобы решить эту проблему чрезмерного использования памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...