Php 无法从命令行调用CodeIgniter控制器函数
我正在编写一个cron作业函数,我的项目基于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' =
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我只是想知道您是否能够使用我的示例解决这个问题