我想使用此帖子中提供的示例代码执行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
有人看错了吗?
谢天谢地。
答案 0 :(得分:1)
通常配置服务器,以便从命令行运行php
使用PHP的CLI版本,而不是提供Web请求的标准版本。您的服务器没有这样配置,因此您的cron脚本使用的是标准的PHP二进制文件。然后,ZF将此请求检测为正常请求,而不是控制台请求,这就是您获取网页的原因。通过直接调用php-cli
二进制文件,您可以绕过此问题。