我想使用这篇文章中提供的示例代码执行一个 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
二进制文件,您可以绕过此问题。