13

Zend Framework 2 でアプリケーションをビルドしています。製品を更新するための cron ジョブを設定したいと考えています。このようなスクリプトはパブリック フォルダーの外から実行する必要があることはわかっていますが、残念ながら cron のスクリプトはフレームワーク ファイルを使用する必要があります。
これどうやってするの?
私が見つけた唯一の方法は、パブリックフォルダーの外からスクリプトを実行し、ハッシュまたはパスワードを追加してリダイレクトすることです

www.domain.com/cron/test

したがって、すべてのフレームワーク機能を使用できます。
それは安全ですか?多分他の方法がありますか?

4

2 に答える 2

25

このような要件には CLI を使用することを強くお勧めします。

  1. アプリケーション モジュール内で updateAction() を使用して ConsoleController を作成します。
  2. アプリケーション モジュールの にコンソール ルートを追加し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'
                        )
                    )
                )
            )
        )
    )
    );
    
  3. ターミナルを開いて、

    $ cd /path/to/your/project
    $ php public/index.php updateproducts
    

それで全部です。それが役に立てば幸い。

于 2013-11-03T11:21:23.753 に答える
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>
于 2014-05-22T10:43:15.093 に答える