Cron Dispatcher CakePHP 2.0 - PullRequest
       7

Cron Dispatcher CakePHP 2.0

3 голосов
/ 13 декабря 2011

Я использую CakePHP 2.0 и пытаюсь настроить cronjob для выполнения метода в контроллере. Я сходил с ума, просматривал различные учебники и случайные сайты, чтобы посмотреть, смогу ли я найти решение.

Я получаю следующую ошибку:

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

Вот нижняя часть файла cron_dispatcher.php в моем каталоге app / webroot / .

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. Я искал Google безрезультатно. Я не уверен на 100%, как работает Диспетчер, но любая помощь будет принята с благодарностью. Спасибо.

== ОБНОВЛЕНИЕ Общий хостинг GoDaddy не позволяет вам изменять настройки argc argv.

Ответы [ 4 ]

17 голосов
/ 04 января 2012

Если кому-то еще интересно,

В новом CakePHP 2.0.5 вы найдете index.php в папке webroot:

Скопируйте этот файл и назовите его 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, не смогут запустить ваш скрипт.

В файле htaccess в webroot добавьте:

<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
2 голосов
/ 13 мая 2014

Нет необходимости в Cron Dispatcher

Существует и никогда не было необходимости создавать Cron Dispatcher.Единственное, что требуется для использования приложения CakePHP через cron , это создать консольную команду и вызвать ее:

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

Когда-то в прошломв книге был какой-то плохой совет , в котором с тех пор исправлено .

2 голосов
/ 13 декабря 2011

$ argc и $ argv - это переменные окружения, заданные в CLI.
Возможно, вам придется проверить настройку PHP на register_argc_argv (что НЕ следуетинвалиды)

0 голосов
/ 13 декабря 2011

Я не уверен, как вы настроили свою работу cron, но как насчет чего-то вроде этого:

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

Конечно, лучшая идея - создать оболочку для торта и запустить ее,в зависимости от ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...