ZF 1 - Запуск скриптов по cron'у

2012-08-22
Zend Framework

Иногда возникает необходимость запускать скрипты по крону. Для того что бы это сделать на Zend Framework, нужно сделать следующее.

  1. Создаем каталог cron в каталоге application.

  2. В каталоге cron создаем php файл с нужным именем, который необходимо запускать по крону.

  3. Созданный файл должен иметь следующее содержимое:
<?php
defined('APPLICATION_PATH') || define('APPLICATION_PATH', dirname(realpath(__FILE__)) . '/../../application/');
defined('ZEND_PATH') || define('LIBRARY_PATH', dirname(realpath(__FILE__)) . '/../../library/');

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(LIBRARY_PATH),
    realpath(APPLICATION_PATH),
    get_include_path(),
)));

defined('APPLICATION_ENV') || define('APPLICATION_ENV', (isset($argv[1]) ? $argv[1] : 'production'));

/** Zend_Application */
require_once 'Zend/Application.php';

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap();

/**
 * Далее идет ваш код, как в обычном контроллере.
 * К примеру данный скрипт рассылает сообщения пользователям.
 */

require_once 'models/DbTable/Users.php';
$usersModel = new Models_DbTable_Users();
$users = $usersModel->fetchAll()->toArray();
foreach($users as $user) {
    $mail = new Zend_Mail();
    $mail->addTo($user['email'], $user['fullName']);
    $mail->setSubject('Newsletter');
    $mail->setBodyHtml('Hello ' . $user['fullName'] . '!');
    $mail->send();
}

Теперь этот скрипт можно запускать по крону или из консоли, передавая параметр для APPLICATION_ENV:

$ php mailer.php production

Код этого скрипта может содержать вызов моделей, хелперов, все так же само как в обычном действии контроллера.