zend framework 2.2.4 cron job返回html主页

时间:2015-06-22 08:16:02

标签: php zend-framework cron

我想使用此帖子中提供的示例代码执行cron作业: How to run cron job with zend framework 2

在我的module.config.php中:

return array(
    'console' => array(
        'router' => array(
            'routes' => array(
               'my-first-route' => array(
                    'options' => array(
                    'route'    => 'hello',
                    'defaults' => array(
                        'controller' => 'Cron\Controller\Index',
                        'action'     => 'index'
                        )
                    )
                )
            )
        )
    ),
    'controllers' => array(
        'invokables' => array(
            'Cron\Controller\Index' => 'Cron\Controller\IndexController',
        ),
    ),
);

在控制器中:

namespace Cron\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class IndexController extends AbstractActionController {

    public function indexAction() {
        echo "Cron jobs";
        echo "\r\n";
    }

}

在public / index.php中:

<?php

chdir(__DIR__);
define('BASE_PATH', realpath(__DIR__));
define('PUBLIC_PATH', BASE_PATH.'/');

// Setup autoloading
require 'init_autoloader.php';

// Run the application!
Zend\Mvc\Application::init(require 'config/application.config.php')->run();

我使用的命令行

php $HOME/public_html/domain.com/public/index.php hello

由于某种原因我不知道此代码返回Web应用程序主页的html版本,而预期的消息是

Cron jobs

但是当我创建一个cron.php文件时

<?php 
//cron.php
echo "Cron jobs";

并在命令行中调用它完美无缺。

php $HOME/public_html/domain.com/public/cron.php

当我运行php -v这是我得到的

PHP 5.4.37 (cgi-fcgi) (built: Feb 13 2015 17:05:02)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with the ionCube PHP Loader v4.6.1, Copyright (c) 2002-2014, by ionCube Ltd., and
    with Zend Guard Loader v3.3, Copyright (c) 1998-2013, by Zend Technologies

有人看错了吗?

谢天谢地。

1 个答案:

答案 0 :(得分:1)

通常配置服务器,以便从命令行运行php使用PHP的CLI版本,而不是提供Web请求的标准版本。您的服务器没有这样配置,因此您的cron脚本使用的是标准的PHP二进制文件。然后,ZF将此请求检测为正常请求,而不是控制台请求,这就是您获取网页的原因。通过直接调用php-cli二进制文件,您可以绕过此问题。