无法从命令行调用CodeIgniter控制器功能

时间:2016-07-22 14:56:53

标签: php codeigniter cron

我正在编写一个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时,它都有效

我做过傻事还是有更大的问题。

1 个答案:

答案 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();
     }
}
}