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

Php 无法从命令行调用CodeIgniter控制器函数,php,codeigniter,cron,Php,Codeigniter,Cron,我正在编写一个cron作业函数,我的项目基于CodeIgniter框架。下面是我的身份验证服务器中的控制器类(Cron.php) class Cron extends CI_Controller { public function log_update() { $opts = array('http' => array( 'method' => 'GET', 'timeout' =

我正在编写一个cron作业函数,我的项目基于
CodeIgniter框架
。下面是我的身份验证服务器中的控制器类(
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);
    }
 }
下面是我的project server中的
Data\u 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\u update
时,只显示字符串“hi”,而不是“hi welcome”

但是,当我在Data\u controller构造函数中调用
$this->get\u log\u update()
时,以及当我直接从浏览器访问url时,它都可以工作


我是否做了一些愚蠢的事情,或者是否存在更大的问题。

这可能与CLI问题有关

首先看看如果使用
php cli index.php cron log\u update
而不是
php index.php cron get\u log\u update()
(只需添加-cli)会发生什么

然后,如果这不起作用,请尝试在
if(is_cli())
语句中包装您的
echo
,看看会发生什么。实际上,为了获得更多关于正在发生的事情的提示,请尝试在cli内部使用echo,在else上使用另一个
echo“not cli”

请让我知道这是否有帮助

下面是一个使用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();
     }
}
}

这可能与CLI问题有关

首先看看如果使用
php cli index.php cron log\u update
而不是
php index.php cron get\u log\u update()
(只需添加-cli)会发生什么

然后,如果这不起作用,请尝试在
if(is_cli())
语句中包装您的
echo
,看看会发生什么。实际上,为了获得更多关于正在发生的事情的提示,请尝试在cli内部使用echo,在else上使用另一个
echo“not cli”

请让我知道这是否有帮助

下面是一个使用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();
     }
}
}

如果您尝试从浏览器地址栏获取数据会怎么样?@siddhesh抱歉,当从浏览器栏访问url时,我只收到“hi”。为什么数据控制器从我的控制器扩展,而工作的控制器从CI控制器扩展?如果您尝试从浏览器地址栏获取数据会怎么样?@siddhesh抱歉,我只收到“hi”当从浏览器栏访问url时。为什么数据\u控制器从我的\u控制器扩展,而工作的控制器从CI\u控制器扩展?
php cli
不工作,尝试时
is\u cli()
出现致命错误“未定义函数”。根据谷歌的说法,我将其替换为
is\u cli\u request()
,这也导致了同样的错误。然后我找到了
$this->input->is_cli_request()
,它是特定于CodeIgniter的,它回显“inside cli”。最后我用php-cli执行了
php-cli
,它工作了,但只显示了“hi”,而不是“hi welcome”。这是正确的路径。你能用$this->input->is\u cli\u request()和你最新的cron指令发布你的全部代码吗?另外,请确保您使用的是php cli的完整路径。@DhiwaTdG只是在我的答案中添加了一个示例。我希望这能作为参考。请随意发布您的代码,以便我可以查看。@DhiwaTdG我只是想知道您是否能够使用我的示例
php-cli
解决此问题,但是尝试
is_-cli()
时出现了一个致命错误“未定义函数”。根据谷歌的说法,我将其替换为
is\u cli\u request()
,这也导致了同样的错误。然后我找到了
$this->input->is_cli_request()
,它是特定于CodeIgniter的,它回显“inside cli”。最后我用php-cli执行了
php-cli
,它工作了,但只显示了“hi”,而不是“hi welcome”。这是正确的路径。你能用$this->input->is\u cli\u request()和你最新的cron指令发布你的全部代码吗?另外,请确保您使用的是php cli的完整路径。@DhiwaTdG只是在我的答案中添加了一个示例。我希望这能作为参考。请随意发布您的代码,以便我可以查看。@DhiwaTdG我只是想知道您是否能够使用我的示例解决这个问题