【发布时间】:2011-02-28 19:34:32
【问题描述】:
我已经看过很多关于 cron 和 ZF 的帖子,但大多数解决方案都让这项工作由公众来触发。
如果您想设置一个只能由 cron 运行的操作怎么办?不是某个匿名用户,也不是必须登录的人?
我使用的解决方案涉及将一个文件放在我的 web 根目录之外,让它引导足够的 ZF 以使用我需要的东西(比如,我不需要视图),然后从 cron 中点击它。 我的问题是,这是一种“最佳实践”方式吗?如果您需要使代码可以通过网络访问,但仍需要防止随机用户找到并运行它,该怎么办?
为了说明,这是我正在做的(有效的)从 php 命令行运行的 cron 作业,并且在同一台服务器上,如下所示:
* 10 * * * php /Apps/ZF/cronjobs/crontest.php
Webroot 为:/Apps/ZF/someproject/
crontest.php:
<?php
ini_set('include_path', ini_get('include_path') . ':/Apps/ZF/someproject/library');
define('APPLICATION_PATH','/Apps/ZF/someproject/application');
define('APPLICATION_ENVIRONMENT','test');
//Include the loader (for loading ZF resources)
require_once 'Zend/Loader.php';
//Include the model (to access the Sites model in this case)
require_once(APPLICATION_PATH . '/models/Planets.php');
Zend_Loader::registerAutoload();
$configuration = new Zend_Config_Ini(
APPLICATION_PATH . '/config/config.ini',
APPLICATION_ENVIRONMENT
);
// DB adapter
$dbAdapter = Zend_Db::factory($configuration->database);
// DB table setup
Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);
// Whatever code we want to run...
$test = new Model_Planets();
$test->fetchEntries();
Zend_Debug::dump($test);
?>
所以,正如我所说,这行得通,所以我不是在找人给我写一个解决方案......只是对这样做“更好”感到好奇。另外,如果我需要通过 Web 访问它,但仍然希望它只能由 cron 运行,该怎么办?如何让它更灵活(因为我在这里硬编码了一些我怀疑可以变得更加动态的路径)?
我假设我可以列出允许的服务器,然后使用 $_SERVER['REMOTE_ADDR'] 进行测试?
大家觉得呢?建议?我一个人工作,所以我没有同事可以在这方面寻求帮助......所以在某种程度上是我的同事。
【问题讨论】:
标签: php zend-framework cron