Utilizando PHP na linha de comando com Zend Framework

Quem me conhece sabe que sempre gostei muito de brincar com o Terminal/Prompt, então, tenho costume de criar e utilizar vários scripts para automatizar algumas tarefas repetitivas, nos meus projetos, tenho costume de criar uma pasta ‘bin’, onde coloco os scripts que deverão rodar via Cron ou como um Daemon.

Mas assim como já utilizamos nosso framework favorito para fazermos nossos sites e/ou aplicações, porque não utilizarmos também para fazer nossos scripts?

Meu framework favorito atualmente, é o Zend, principalmente por ser modular - mas isso já é assunto para outro post ou conversa de bar -, então, vou apresentar abaixo, a estrutura básica de um script cli, utilizando o Zend.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
    <?php
/**
 * Script PHP-CLI exemplo
 */
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', __DIR__  . '/../application');

defined('APPLICATION_ENV')
    || define(
        'APPLICATION_ENV', (
            getenv('APPLICATION_ENV') ?
            getenv('APPLICATION_ENV') :
            'production'
        )
    );

set_include_path(
    implode(
        PATH_SEPARATOR,
        array(
            realpath(APPLICATION_PATH . '/../library'),
            get_include_path(),
        )
    )
);

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

// E vamos lá, rodando a aplicação com suas configurações
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();

/**
 * Aqui, configuro os parâmetros de entrada válidos
 * 
 * teste.php --help
 * teste.php --start
 * tsete.php --stop
 */
try {
    $opts = new \Zend_Console_Getopt(
        array(
            'help'  => 'Exibe esta ajuda.',
            'start' => 'Inicia.',
            'stop'  => 'Encerra.',
        )
    );

    $opts->parse();
} catch (\Zend_Console_Getopt_Exception $e) {
    exit($e->getMessage() ."\n\n". $e->getUsageMessage());
}

if(isset($opts->help)) {
    echo $opts->getUsageMessage();
    exit;
}

/**
 * Action : start
 */
if(isset($opts->start)) {
    // nosso código
}

/**
 * Action : stop
 */
if(isset($opts->stop)) {
    // nosso código
}

Bom, o código está bem simples de entender e auto explicativo. Basicamente, instanciamos o Zend_Application, normalmente, como fazemos em nosso index.php, para instanciarmos a app e tudo que for necessário para rodar. Em seguida, com o Zend_Console_Getopt, definimos os parâmetros válidos, a partir daí, é só criar as funções de chamadas para as respectivas ações.

Pronto, agora é só dar asas a imaginação e se divertir um bocado com Zend e PHP-CLI.