2013-11-03 10 views
12

Ho un'applicazione incorporata in Zend Framework 2. Vorrei impostare cron job per l'aggiornamento dei miei prodotti. So che gli script come questo dovrebbero essere eseguiti al di fuori della cartella pubblica, ma sfortunatamente il mio script in cron ha bisogno di usare i file framework.
Come posso fare questo?
L'unico modo che ho capito è quello di eseguire lo script al di fuori della cartella pubblica poi aggiungere un po hash o la password e reindirizzare aCome eseguire cron job con zend framework 2

www.domain.com/cron/test 

Così avrà tutte le funzionalità quadro.
Sarà sicuro? Forse c'è un altro modo?

risposta

24

Si consiglia vivamente di utilizzare CLI per tale requisito.

  1. Creare un consoleController con un updateAction() all'interno del modulo dell'applicazione.
  2. Aggiungi un console route al di module.config.php vostro modulo applicativo:

    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. Ora aprite il terminale e

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

Questo è tutto. Spero che sia d'aiuto.

+0

Grazie, darò una prova. Solo una domanda. Il tuo metodo è sicuro? Non sarà accessibile tramite HTTP? – user1409508

+1

Sì, non sarà accessibile tramite HTTP. Dalla documentazione: '" Le route della console verranno elaborate solo quando l'applicazione viene eseguita all'interno della finestra della console (terminale) .Non hanno alcun effetto sulla richiesta Web (http) e verranno ignorate.È possibile definire solo route HTTP (solo Web applicazione) o solo le rotte della Console (il che significa che vogliamo un'applicazione di sola console che rifiuterà di funzionare in un browser). "Verifichi: http://framework.zend.com/manual/2.2/en/modules/zend .console.routes.html – edigu

+0

Grazie, volevo esserne sicuro. Accetterò la tua risposta dopo averla verificata. Probabilmente sarà domani. Grazie per l'aiuto! – user1409508

2

Ho trovato la soluzione su collabnet (che ora è morto).

sto copiando la soluzione qui come ColabEdit volte rimuove post:

<?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> 
+0

sopra il link è morto! –

+0

grazie, rimosso ... – HappyCoder