加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Cron Dispatcher CakePHP 2.0

发布时间:2020-12-13 22:19:06 所属栏目:PHP教程 来源:网络整理
导读:我正在使用Cake PHP 2.0,并一直在尝试设置一个cronjob来执行控制器中的方法.我一直很疯狂,查看各种教程和随机网站,看看我是否能找到解决方案. 我收到的错误是这样的: Undefined variable: argc [APP/webroot/cron_dispatcher.php,line 83 这是我的app / web
我正在使用Cake PHP 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的设置.

解决方法

万一其他人有兴趣,

在新的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读