我在Zend Framework 2中内置了应用程序。我想设置cron作业来更新我的产品。我知道这样的脚本应该从公共文件夹外部运行,但不幸的是我在cron中的脚本需要使用框架文件。
我怎么能这样做?
我想出的唯一方法是从公共文件夹外部运行脚本然后添加一些哈希或密码并重定向到
www.domain.com/cron/test
所以我将拥有所有框架功能 它会安全吗?也许还有另一种方式?
答案 0 :(得分:24)
我强烈建议您使用CLI来满足此类要求。
将console route添加到您的应用程序模块的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
多数民众赞成。希望它有所帮助。
答案 1 :(得分:2)
我在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>