无法从命令行调用CodeIgniter控制器函数


Unable to call CodeIgniter controller function from command line

我正在编写一个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-server命令行执行php index.php cron log_update时,只显示字符串"hi",而不是"hi welcome"。

但当我在Data_controller构造函数中调用$this->get_log_update()时,以及当我直接从浏览器访问url时,它都能工作

我做了什么傻事吗?还是有更大的问题。

这可能与CLI问题有关。

首先看看如果使用php-cli index.php cron log_update而不是php index.php cron get_log_update()会发生什么(只需添加-cli)。

如果这不起作用,请尝试将echo包装在if (is_cli())语句上,看看会发生什么。实际上,在elseif上尝试echo "inside cli"和另一个echo "not cli",以便获得更多关于正在发生的事情的提示。

请告诉我这是否有帮助。

EDIT这里有一个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();
     }
}
}