Cron Dispatcher CakePHP 2.0

时间:2011-12-13 07:07:24

标签: php cakephp cron

我正在使用CakePHP 2.0并且一直在尝试设置cronjob来执行控制器中的方法。我一直很疯狂,查看各种教程和随机网站,看看我是否能找到解决方案。

我收到的错误是:

Undefined variable: argc [APP/webroot/cron_dispatcher.php, line 83

以下是 app / webroot / 目录中cron_dispatcher.php文件的底部。

if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
        trigger_error("CakePHP core could not be found.  Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php.  It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
    }
    if (isset($_GET['url']) && $_GET['url'] === 'favicon.ico') {
    return;
    } else {
      define('CRON_DISPATCHER',true);
    if($argc >= 2) {
        $Dispatcher= new Dispatcher();
        $Dispatcher->dispatch($argv[1]);
        }
    }

我无法找到这些变量($ argv和$ argc)的定义位置。它们未在dispatcher.php文件本身的任何位置定义。我搜索谷歌无济于事。我不是百分百确定Dispatcher的工作原理,但是我们将非常感谢任何帮助。感谢。

==更新 GoDaddy的共享主机不允许您更改argc argv的设置。

4 个答案:

答案 0 :(得分:17)

如果其他人有兴趣,

在新的CakePHP 2.0.5中,你将在webroot文件夹中找到一个index.php:

复制此文件并将其命名为cron_dispatcher.php,并将其放入同一目录(webroot)

您会在最底部找到此代码:

$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(new CakeRequest(), new CakeResponse(array('charset' => Configure::read('App.encoding'))));

将底部更改为

define('CRON_DISPATCHER',true);
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(new CakeRequest($argv[1]), new CakeResponse(array('charset' => Configure::read('App.encoding'))));

你在做两件事:将CRON_DISPATCHER设置为true,并传递环境变量($ argv [1])。

在您的控制器中,在执行任何其他操作之前添加此行:

if (!defined('CRON_DISPATCHER')) { $this->redirect('/'); exit(); }

这将确保访问yoursite.com/controller/cronaction的用户无法运行您的脚本。

在webroot的htaccess文件中,添加:

<Files  "cron_dispatcher.php">
    Order deny,allow
    Deny from all
</Files>

这将确保人们访问yoursite.com/cron_dispatcher.php将无法运行它。

现在使用以下命令设置cron作业:

php /home/yoursite/public_html/cakephp/app/webroot/cron_dispatcher.php /controller/cronjobaction

答案 1 :(得分:2)

$argc$argv是在CLI中设置的环境变量 您可能需要检查register_argc_argv上的PHP设置(不应禁用)

答案 2 :(得分:2)

不需要Cron Dispatcher

创建一个cron调度程序是有的,而且从来没有过。 use a CakePHP application via cron所需的唯一内容是create a console command,并将其命名为:

*/5  *    *    *    *  cd /full/path/to/app && Console/cake myshell myparam

在过去的某个时刻,书中有some poor advice since been corrected

答案 3 :(得分:0)

我不确定你是如何设置你的cron工作的,但是这样的事情怎么样:

*/10 * * * * wget -O - -q "http://localhost/url/to/your/controller/action"

当然,更好的想法可能是根据您的需要创建一个蛋糕外壳并运行它。