我正在编写一个cron作业函数,我的项目是基于CodeIgniter framework
构建的。以下是我的身份验证服务器中的控制器类(Cron.php
)。
class Cron extends CI_Controller {
public function log_update() {
$opts = array('http' =>
array(
'method' => 'GET',
'timeout' => 10
)
);
$context = stream_context_create($opts);
$url = "http://lamp.co.uk/project/data_controller/get_log_update";
$contents = file_get_contents($url, TRUE, $context);
var_dump($contents);
}
}
以下是我项目服务器中的Data_controller
课程。
class Data_controller extends MY_Controller {
public function __construct() {
parent::__construct();
echo "hi ";
}
public function get_log_update() {
echo "welcome";
}
}
当我从auth服务器命令行执行php index.php cron log_update
时,只显示字符串“hi”而不是“hi welcome”。
但是当我在Data_controller构造函数中调用$this->get_log_update()
时,以及直接从浏览器访问url时,它都有效
我做过傻事还是有更大的问题。
答案 0 :(得分:0)
这可能与CLI问题有关。
首先看看如果您使用php-cli index.php cron log_update
代替php index.php cron get_log_update()
会发生什么(只需添加 -cli )。
然后,如果这不起作用,请尝试将echo
包装在if (is_cli())
语句上,看看会发生什么。实际上,在 else 上尝试echo "inside cli"
和另一个echo "not cli"
if ,以获得有关正在发生的事情的更多提示。
如果有帮助,请告诉我。
这里的编辑是一个使用is_cli的工作示例:
class Rutinas extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->database();
// html y url autoloaded
if (is_cli()) {
$this->load->model('Trips_model');
echo "ejecutando cronjob...\r\n";
} else {
echo "creo que has perdido el camino...";
}
}
//redirect if needed, otherwise display the user list
function index()
{
if (is_cli())
{
$viajes_por_archivar = $this->Trips_model->trips_to_update();
echo "Viajes archivados:\t".$update_past_trips_result;
echo "\r\n";
echo "Acuerdos archivados:\t".$update_lost_deals_result;
} else {
echo " en el index";
// $this->output->enable_profiler(TRUE);
// phpinfo();
}
}
}