PHP
框架,第 5 部分: 集成外部任
务
当应用程序与数据库进行交互时,您一般都会发现需要设置一些自动执行的任务。通
常,这些任务都面向基本的数据库管理,例如表删除、终止帐户等。根据以往的经验,一
般都是用 Perl
编写这些任务。虽然 Perl
是一种优秀的语言,但是它把一些 PHP 没有的
内容引入到表中,否则使用一种语言编写自动执行的任务和应用程序将更有意义。它更易
于支持,您可以共享代码,并且在来回切换时不会混淆语法。
同样的道理,由于使用框架编写了 Blahg,因此,如果可以继续使用框架执行一般
的自动执行任务将非常好。您可以使用已经建立的常用结构,也可以使用已经创建的方法,
并且可以维护使用模型获得的数据库独立性,而不用编写特定数据库的数据库接口代码。
如果要使用框架,那么全面使用它会十分有意义。
对于给定的框架结构,可以使用一种简便方法创建可以通过 cron 调用的自动执行
任务:将任务作为现有控制器或者新控制器中的一项操作并使用 wget 调用该操作。这样
做绝对有效,而且如果您不怎么注重执行任务的方法,也就是说不安全的方法,那么可
以使用 wget。
“
”
但是应当注意这里所说的 不安全 一词。如果以这种方法编写自动执行的任务,那
么这些任务可被外界使用。即使不以任何方式链接操作,使用名为 Mxyzptlk 的控制器,
或者要求在执行前必须把 40 个字符的惟一字符串传递给操作,操作也仍然可用于执行。
因此,隐藏式安全性(Security through obscurity)实际上根本不安全。由于许多自动
执行的任务往往倾向于数据库密集型,因此用户不希望随机执行这些操作。
因此,虽然可以通过简单的方法实现自动执行任务,但是最好寻找一种更安全的方
法。下面的每个示例将向您展示在每个框架中实现这一目标的一种方法。方法往往有很多
种。在阅读完本文后,您可以亲自试验或者做一些其他研究。看看其他人是怎样做的。
另外,在继续之前请对表进行备份。您将要删除一些记录,而能够把表恢复到默认状
态对于稍后的测试将十分有用。
Zend 框架中的外部任务
由于 Zend 框架挑剔的本性,因此使用框架创建自动执行的任务时允许灵活选择要
使用的组件。由于不打算通过处理 Web
请求的现有前端控制器来访问 Web 应用程序,
因此应当创建一个额外的控制器来控制脚本执行。该控制器看上去将类似前端控制器,因
为您将注册自动装入器(autoloader)并为模型定义基本适配器。但是重要的差别可能