PHP实现云计算第1部分:结合使用 Amazon S3 和 Zend Framework
云计算承诺为用户和应用程序提供不受限制的磁盘空间。在理想的世界中,访问这类存储将和访问本地硬盘一样简便。不幸的是,大多数云存储服务的基本 API 要求程序员考虑协议和配置细节,而不是简单地处理数据。本文将探查 Zend Framework 中的类,它们将使 Amazon 的 S3 云存储服务变成一个真正无限大的硬盘。
连接格式和云计算
构建在云中使用的应用程序的主要挑战就是与服务本身的接口。大多数服务提供了 REST 或 SOAP 接口(S3 同时提供了两者)。REST 的主要优势就是它不是特定于语言的。这意味着您可以从所喜欢的任意编程语言中调用服务。劣势就是在使用 REST 或 SOAP 时,您必须考虑请求的细节问题,而不是关心您要使用的数据。举个例子,所有发送给 S3 的请求都必须包含一个由您的 Amazon 访问密匙和签名值组成的身份验证令牌。这表示您的请求必须包含这样一个值:0PN5J17HBGZHT7JJ3X82:frJIUN8DYpKDtOLCwo//yllqDzg=。
显然,让您能够专注于数据而不是签名和其他细节的更高级的方法可以带来显著的生产力改进。这就是 Zend_Service_Amazon_S3 类发挥作用的地方。该类允许您关注数据,而不是关注 HTTP 头部结构、SOAP 信封或其他无关细节。
入门
如果您还没有安装 Zend Framework,那么请从 zend.com/community/downloads 下载并安装完整的包。该包将在您的机器上安装 Zend Framework、PHP 和 Apache Web 服务器。完成安装后,请访问 http://localhost/ZendServer/。参考 Zend Framework 安装文档获得所有细节。如果可以登录到 ZendServer 控制台,那么您就准备就绪了。
要执行本文后面介绍的练习,您需要在 Amazon 中建立一个帐户。建立好帐户后,需要对您的凭证进行管理。Amazon 为您提供了一个访问密匙和秘密密匙。在使用 S3 时,您的 PHP 页面需要这些值。管理这些信息的一种方法就是将这些值放到您的代码里。
清单 1. 在 PHP 代码中存储凭证
// Credentials for Amazon - Don't do this!
$awsKey = "0123456789ABCDEFGHIJ";
$awsSecret = "0123456789abcdefghiABCDEFGHI1234567890AB";
这种方法是有效的,但是您必须将代码放入到每一个有需要的 PHP 文件中。更好的做法是将这些值放入到一个 PHP .ini 文件,该文件类似清单 2 所示。
清单 2. 在 PHP .ini 文件中存储凭证
; Configuration file to hold secret keys, account numbers and other useful
; strings for Amazon and other cloud accounts.
[amazon]
accessKey=0123456789ABCDEFGHIJ
secretKey=0123456789abcdefghiABCDEFGHI1234567890AB
ownerId=123456789012
[nirvanix]
username=jane_doe
password=XXXXXXXX
appKey=01234567-89ab-cdef-0123-456789abcdef
一个简单的 PHP 类可以轻松地处理这些值。
清单 3. 用于检索凭证的简单 PHP 类
<?php
// Simple class to retrieve credentials from an .ini file
class Credentials
{
var $key_array;
function Credentials() {
$this->key_array = parse_ini_file("..\conf\cloud.ini", true);
}
function getCredential($group, $key) {
return $this->key_array[$group][$key];
}
}
?>