| Under Construction This proposal is under construction and is not ready for review. |
<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
Zend_Service_Amazon_S3 is an implementation of a PHP user-stream wrapper for Amazon's Simple Storage Service (S3)Zend Framework: Zend_Service_Amazon_S3 Component Proposal
Proposed Component Name
Zend_Service_Amazon_S3
Developer Notes
http://framework.zend.com/wiki/display/ZFDEV/Zend_Service_Amazon_S3
Proposers
Justin Plock
Revision
1.0 - 10 March 2008: Initial revision. (wiki revision: 2)
Table of Contents
1. Overview
2. References
3. Component Requirements, Constraints, and Acceptance Criteria
Most requirements take the form of "foo will do ...." or "foo will not support ...", although different words and sentence structure might be used. Adding functionality to your proposal is requirements creep (bad), unless listed below. Discuss major changes with your team first, and then open a "feature improvement" issue against this component.
- This component will implement the Amazon S3 API
- This component will use Zend_Http_Client to communicate with S3
- This component will implement a user-based stream wrapper for S3 (s3://)
4. Dependencies on Other Framework Components
- Zend_Http_Client
5. Theory of Operation
This component will be utilized using the stream_wrapper_register() PHP method to register a new user-based stream interface to S3. This allows the user to utilize existing fread(), fwrite(), fclose(), mkdir(), rmdir(), and stat() methods to directly interface with S3 buckets and objects.
6. Milestones / Tasks
- Milestone 1: [DONE] Design notes will be published here
- Milestone 2: Working prototype checked into the incubator supporting use cases
- Milestone 3: Unit tests exist, work, and are checked into SVN.
- Milestone 4: Initial documentation exists.
7. Class Index
- Zend_Service_Amazon_S3
8. Use Cases
| UC-01 |
|---|
require_once 'S3.php';
define('AWS_ACCESS_KEY', 'my-access-key');
define('AWS_SECRET_KEY', 'my-secret-key');
S3::setKeys(AWS_ACCESS_KEY, AWS_SECRET_KEY);
if (!stream_wrapper_register('s3', 'S3')) {
echo 'Could not register S3 stream';
exit(0);
}
mkdir('s3://php-test');
$f = fopen('s3://php-test/file.txt', 'w');
for ($i = 0; $i <= 10000; $i++) {
fwrite($f, "Line #$i");
}
fclose($f);
$f = fopen('s3://php-test/file.txt', 'r');
$data = '';
while (!feof($f)) {
$data .= fread($f, 1024);
}
fclose($f);
echo '<hr>';
echo nl2br($data);
echo '<hr/>';
$e = opendir('s3://');
while (($f = readdir($e)) !== false) {
echo "BUCKET: $f<BR>";
}
closedir($e);
$stat = stat('s3://php-test/file.txt');
var_dump($stat);
$stat = stat('s3://php-test');
var_dump($stat);
unlink('s3://php-test/file.txt');
rmdir('s3://php-test');