background image

PHP 

 

框架,第 部分集成外部任

当应用程序与数据库进行交互时,您一般都会发现需要设置一些自动执行的任务。通

常,这些任务都面向基本的数据库管理,例如表删除、终止帐户等。根据以往的经验,一

 

般都是用 Perl 

 

编写这些任务。虽然 Perl 

 

是一种优秀的语言,但是它把一些 PHP 没有的

内容引入到表中,否则使用一种语言编写自动执行的任务和应用程序将更有意义。它更易

于支持,您可以共享代码,并且在来回切换时不会混淆语法。

 

同样的道理,由于使用框架编写了 Blahg,因此,如果可以继续使用框架执行一般

的自动执行任务将非常好。您可以使用已经建立的常用结构,也可以使用已经创建的方法,

并且可以维护使用模型获得的数据库独立性,而不用编写特定数据库的数据库接口代码。

如果要使用框架,那么全面使用它会十分有意义。

 

对于给定的框架结构,可以使用一种简便方法创建可以通过 cron 调用的自动执行

任务:将任务作为现有控制器或者新控制器中的一项操作并使用 wget 调用该操作。这样

做绝对有效,而且如果您不怎么注重执行任务的方法,也就是说不安全的方法,那么可

 

以使用 wget。

 “

” 

但是应当注意这里所说的 不安全 一词。如果以这种方法编写自动执行的任务,那

 

么这些任务可被外界使用。即使不以任何方式链接操作,使用名为 Mxyzptlk 的控制器,

 

或者要求在执行前必须把 40 个字符的惟一字符串传递给操作,操作也仍然可用于执行。

因此,隐藏式安全性(Security through obscurity)实际上根本不安全。由于许多自动

执行的任务往往倾向于数据库密集型,因此用户不希望随机执行这些操作。

因此,虽然可以通过简单的方法实现自动执行任务,但是最好寻找一种更安全的方

法。下面的每个示例将向您展示在每个框架中实现这一目标的一种方法。方法往往有很多

种。在阅读完本文后,您可以亲自试验或者做一些其他研究。看看其他人是怎样做的。

另外,在继续之前请对表进行备份。您将要删除一些记录,而能够把表恢复到默认状

态对于稍后的测试将十分有用。

Zend 框架中的外部任务

 

由于 Zend 框架挑剔的本性,因此使用框架创建自动执行的任务时允许灵活选择要

 

使用的组件。由于不打算通过处理 Web 

 

请求的现有前端控制器来访问 Web 应用程序,

因此应当创建一个额外的控制器来控制脚本执行。该控制器看上去将类似前端控制器,因

为您将注册自动装入器(autoloader)并为模型定义基本适配器。但是重要的差别可能