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();