Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 Codeigniter Cron作业,该作业比插入数据库花费更多时间_Php_Codeigniter_Cron - Fatal编程技术网

Php Codeigniter Cron作业,该作业比插入数据库花费更多时间

Php Codeigniter Cron作业,该作业比插入数据库花费更多时间,php,codeigniter,cron,Php,Codeigniter,Cron,我有一个cron作业,它调用以下codeigniter控制器 但这需要花费时间 计算和操作更多操作(平均需要5分钟) 然后在数据库中插入值 <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Mycron extends CI_Controller { public function cron_function() { // simulate time c

我有一个
cron作业
,它调用以下
codeigniter控制器

但这需要花费时间
计算和操作更多操作(平均需要5分钟)
然后在数据库中插入值

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Mycron extends CI_Controller {

    public function cron_function()
    {
        // simulate time cost operations
        sleep(300); // 5 mint = 5 *60 = 300 sec

        $this->load->database();    // line1
        $this->db->reconnect();     // line2

        $this           -> db -> set    ( 'source_id',  '11');
        $this           -> db -> set    ( 'title',  'TTL');
        $query = $this  -> db -> insert ( 'my_table' );

        echo 'END ...'; 
    }
}
然后,当尝试使用两行代码将修复程序重新连接到数据库时
我们面临

A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by 
(output started at .../system/database/drivers/mysqli/mysqli_driver.php:392)
Filename: core/Common.php
Line Number: 568
Backtrace:

A PHP Error was encountered
Severity: Error
Message: Call to a member function real_escape_string() on boolean
Filename: mysqli/mysqli_driver.php
Line Number: 392
Backtrace:

我建议在cron控制器中创建第二个方法,只负责将数据插入数据库


然后,在耗时的操作完成后,您可以使用(比如)第二种方法发布生成的数据,从而绕过MySQL超时限制。

我禁用了自动加载
数据库

旧代码

将来

$autoload['libraries'] = array();
并在调用DB语句之前手动加载它

$this->load->database();
因此,数据库连接将在代价高昂的操作完成后打开

那么这一次(代价高昂的操作)将不会被视为数据库同步操作时间

与自动加载
数据库
库相反,该库在加载页面时启动计时器

检查'my.cnf'中的
wait_timeout
变量并删除
$this->db->reconnect()语句
$autoload['libraries'] = array();
$this->load->database();