Zend Framework 2.2.4 cron job 返回 HTML 主页


zend framework 2.2.4 cron job returns html home page

我想使用这篇文章中提供的示例代码执行一个 cron 作业:如何使用 zend 框架 2 运行 cron job

在我的模块.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";
    }
}

在公共/索引.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

有人看出不对劲吗?

提前谢谢你。

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