У меня есть приложение, построенное в Zend Framework 2. Я хотел бы установить задание cron для обновления моих продуктов. Я знаю, что сценарии, такие как это, должны запускаться из-за пределов общедоступной папки, но, к сожалению, мой скрипт в cron должен использовать файлы фреймворка.
Как я могу это сделать?
Единственный способ, которым я понял, – запустить скрипт из-за пределов общедоступной папки, затем добавить хэш или пароль и перенаправить на
www.domain.com/cron/test
Поэтому у меня будут все функциональные возможности.
Будет ли это безопасно? Может быть, есть другой способ?
Я настоятельно рекомендую использовать CLI для такого требования.
Добавьте консольный маршрут к модулю вашего модуля module.config.php
:
array( 'router' => array( 'routes' => array( ... ) ), 'console' => array( 'router' => array( 'routes' => array( 'cronroute' => array( 'options' => array( 'route' => 'updateproducts', 'defaults' => array( 'controller' => 'Application\Controller\Console', 'action' => 'update' ) ) ) ) ) ) );
Теперь откройте терминал и
$ cd /path/to/your/project $ php public/index.php updateproducts
Это все. Надеюсь, поможет.
Я нашел решение в collabnet (который сейчас мертв).
Я копирую решение здесь, поскольку ColabEdit иногда удаляет сообщения:
<?php /* Cron directory setup: Cron config module.config.php src Cron Controller IndexController.php autoload_classmap.php Module.php NOTES: Remember to include the Cron module in the main config file (trunk/config/application.config.php) Once you have the route in place, write your cron and call it from your webhost cron manager. */ // Cron/config/module.config.php return array( // Placeholder for console routes 'controllers' => array( 'invokables' => array( 'Cron\Controller\IndexController' => 'Cron\Controller\IndexController' ), ), 'console' => array( 'router' => array( 'routes' => array( //CRON RESULTS SCRAPER 'my-first-route' => array( 'type' => 'simple', // <- simple route is created by default, we can skip that 'options' => array( 'route' => 'hello', 'defaults' => array( 'controller' => 'Cron\Controller\IndexController', 'action' => 'index' ) ) ) ), ), ), ); <?php // Cron/src/Cron/Controller/IndexController.php namespace Cron\Controller; use Zend\Mvc\Controller\AbstractActionController; class IndexController extends AbstractActionControlle { public function indexAction() { echo "hello"; echo "\r\n"; } } From the console navigate to trunk (or public_html) (the directory before public) and run: path/to/trunk>php public/index.php hello hello path/to/trunk>