Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过CRON运行CodeIgniter文件?_Php_Codeigniter_Cron - Fatal编程技术网

Php 如何通过CRON运行CodeIgniter文件?

Php 如何通过CRON运行CodeIgniter文件?,php,codeigniter,cron,Php,Codeigniter,Cron,我过去曾尝试过以下方法: <?php set_time_limit(0); $_SERVER['PATH_INFO'] = 'cron/controller/index'; $_SERVER['REQUEST_URI'] = 'cron/controller/index'; require_once('index.php'); ?> 如果我在我的浏览器中键入cron.php的URL,它就可以正常工作,但是每当它通过cron运行时,就会出现404错误。将以下代码放入CodeIgnit

我过去曾尝试过以下方法:

<?php
set_time_limit(0);
$_SERVER['PATH_INFO'] = 'cron/controller/index';
$_SERVER['REQUEST_URI'] = 'cron/controller/index';
require_once('index.php');
?>
如果我在我的浏览器中键入cron.php的URL,它就可以正常工作,但是每当它通过cron运行时,就会出现404错误。将以下代码放入CodeIgniter的
show_404()
功能中

function show_404($page = '')
{
   print_r($_SERVER);
   echo "\n\n";
   die ($page);
}
通过电子邮件将以下输出发送给我:

Array
(
   [SHELL] => /bin/sh
   [MAILTO] => me@gmail.com
   [USER] => [me]
   [PATH] => /usr/bin:/bin
   [PWD] => /home/[me]
   [SHLVL] => 1
   [HOME] => /home/[me]
   [LOGNAME] => [me]
   [_] => /usr/bin/php
   [PHP_SELF] =>
   [REQUEST_TIME] => 1266479641
   [argv] => Array
       (
           [0] => /home/[me]/public_html/my_project/cron.php
       )

   [argc] => 1
   [PATH_INFO] => cron/controller/index
   [REQUEST_URI] => cron/controllers/index
)


home/[me]
这里我用[我]来代替我的实际用户名


有什么想法吗?

通过CodeIgniter运行cron最简单的方法是通过应用程序提供cron URL

然后通过wget调用它

wget -O - -q -t 1 http://www.example.com/cron/run
在控制器内部,您可以使用日志来确保cron不会运行得太频繁,也就是说,如果谷歌机器人错误地触发了cron

第二种方法是使用lynx

/usr/local/bin/lynx -source http://www.example.com/cron/run

有一篇关于如何在命令行上运行CodeIgniter的wiki文章,但这对于需要通过终端与用户交互的应用程序更有用(也有一个用于此的库)

与使用wget相比,使用这种方式的一个好处是,您可以通过以下方式保护代码不被用户或机器人运行:

if(!empty($_SERVER['HTTP_HOST']))
{
     show_error('Shove off hax0r!');
}

如果您想通过运行url来运行cron作业,这里有一篇很棒的文章

您还可以添加--spider来忽略响应。这将阻止请求超时:

wget -O - -q -t 1 --spider http://www.example.com/cron/run

您可能还想查看以下内容:

这是一个简单的引导程序文件,您可以使用它从命令行直接运行CodeIgniter控制器。对于在cron作业中使用CI控制器来说,这是一个非常简单和优雅的解决方案。它还支持日志记录


使用php cli而不是php
例:


有了w get,我还需要复制星号吗?我是否应该复制您给出的整个命令?星号与cron何时运行有关。我想我引用的是每小时运行cron。酷。我使用cpanel接口添加cron作业,因此不需要asteriks。Cheersit不会使用CLI,如果受apache超时限制,这不是最好的主意。如果您的脚本需要运行很长时间,请使用引导程序此方法的问题是现在您的脚本可以从web访问。通常,通过cron运行的是一个私有脚本。查看
$this->input->is\u cli\u request()
。您应该能够使用
php$HOME/path/to/script/index.php控制器方法param调用cron脚本,请参阅本文。如果你开始每分钟做一次wget或curl,那么频繁地打电话可能会变得很累人。一般语法是/index.php/Eg php/home//public\u html//index.php cron/clear\u unpaid\u请求
wget -O - -q -t 1 --spider http://www.example.com/cron/run
/usr/bin/php-cli  /home/CPANEL_USER/public_html/index.php cronJobs deleteNotifications