mirror of
https://github.com/ceph/ceph
synced 2024-12-22 11:31:55 +00:00
aec2a4742c
Something like v1.5 of the Amazon PHP library requires the AmazonS3 constructor to be given an array of parameters rather than using the globals. More research needs to happen, and particularly about the v2 API, but this might solve someone's problem with v1.5 while we do that research. Signed-off-by: Dan Mick <dan.mick@inktank.com>
209 lines
5.2 KiB
ReStructuredText
209 lines
5.2 KiB
ReStructuredText
.. _php:
|
|
|
|
PHP S3 Examples
|
|
===============
|
|
|
|
Creating a Connection
|
|
---------------------
|
|
|
|
This creates a connection so that you can interact with the server.
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
define('AWS_KEY', 'place access key here');
|
|
define('AWS_SECRET_KEY', 'place secret key here');
|
|
define('AWS_CANONICAL_ID', 'your DHO Username');
|
|
define('AWS_CANONICAL_NAME', 'Also your DHO Username!');
|
|
$HOST = 'objects.dreamhost.com';
|
|
|
|
// require the amazon sdk for php library
|
|
require_once 'AWSSDKforPHP/sdk.class.php';
|
|
|
|
// Instantiate the S3 class and point it at the desired host
|
|
$Connection = new AmazonS3(array(
|
|
'key' => AWS_KEY,
|
|
'secret' => AWS_SECRET_KEY,
|
|
'canonical_id' => AWS_CANONICAL_ID,
|
|
'canonical_name' => AWS_CANONICAL_NAME,
|
|
));
|
|
$Connection->set_hostname($HOST);
|
|
$Connection->allow_hostname_override(false);
|
|
|
|
// Set the S3 class to use objects.dreamhost.com/bucket
|
|
// instead of bucket.objects.dreamhost.com
|
|
$Connection->enable_path_style();
|
|
|
|
|
|
Listing Owned Buckets
|
|
---------------------
|
|
This gets a list of CFSimpleXML objects representing buckets that you
|
|
own. This also prints out the bucket name and creation date of each
|
|
bucket.
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$ListResponse = $Connection->list_buckets();
|
|
$Buckets = $ListResponse->body->Buckets->Bucket;
|
|
foreach ($Buckets as $Bucket) {
|
|
echo $Bucket->Name . "\t" . $Bucket->CreationDate . "\n";
|
|
}
|
|
|
|
The output will look something like this::
|
|
|
|
mahbuckat1 2011-04-21T18:05:39.000Z
|
|
mahbuckat2 2011-04-21T18:05:48.000Z
|
|
mahbuckat3 2011-04-21T18:07:18.000Z
|
|
|
|
|
|
Creating a Bucket
|
|
-----------------
|
|
|
|
This creates a new bucket called ``my-new-bucket`` and returns a
|
|
``CFResponse`` object.
|
|
|
|
.. note::
|
|
|
|
This command requires a region as the second argument,
|
|
so we use ``AmazonS3::REGION_US_E1``, because this constant is ``''``
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$Connection->create_bucket('my-new-bucket', AmazonS3::REGION_US_E1);
|
|
|
|
|
|
List a Bucket's Content
|
|
-----------------------
|
|
|
|
This gets an array of ``CFSimpleXML`` objects representing the objects
|
|
in the bucket. This then prints out each object's name, the file size,
|
|
and last modified date.
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$ObjectsListResponse = $Connection->list_objects($bucketname);
|
|
$Objects = $ObjectsListResponse->body->Contents;
|
|
foreach ($Objects as $Object) {
|
|
echo $Object->Key . "\t" . $Object->Size . "\t" . $Object->LastModified . "\n";
|
|
}
|
|
|
|
.. note::
|
|
|
|
If there are more than 1000 objects in this bucket,
|
|
you need to check $ObjectListResponse->body->isTruncated
|
|
and run again with the name of the last key listed.
|
|
Keep doing this until isTruncated is not true.
|
|
|
|
The output will look something like this if the bucket has some files::
|
|
|
|
myphoto1.jpg 251262 2011-08-08T21:35:48.000Z
|
|
myphoto2.jpg 262518 2011-08-08T21:38:01.000Z
|
|
|
|
|
|
Deleting a Bucket
|
|
-----------------
|
|
|
|
This deletes the bucket called ``my-old-bucket`` and returns a
|
|
``CFResponse`` object
|
|
|
|
.. note::
|
|
|
|
The Bucket must be empty! Otherwise it won't work!
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$Connection->delete_bucket('my-old-bucket');
|
|
|
|
|
|
Forced Delte for Non-empty Buckets
|
|
----------------------------------
|
|
|
|
This will delete the bucket even if it is not empty.
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$Connection->delete_bucket('my-old-bucket', 1);
|
|
|
|
|
|
Creating an Object
|
|
------------------
|
|
|
|
This creates an object ``hello.txt`` with the string ``"Hello World!"``
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$Connection->create_object('my-bucket-name', 'hello.txt', array(
|
|
'body' => "Hello World!",
|
|
));
|
|
|
|
|
|
Change an Object's ACL
|
|
----------------------
|
|
|
|
This makes the object ``hello.txt`` to be publicly readable and
|
|
``secret_plans.txt`` to be private.
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$Connection->set_object_acl('my-bucket-name', 'hello.txt', AmazonS3::ACL_PUBLIC);
|
|
$Connection->set_object_acl('my-bucket-name', 'secret_plans.txt', AmazonS3::ACL_PRIVATE);
|
|
|
|
|
|
Delete an Object
|
|
----------------
|
|
|
|
This deletes the object ``goodbye.txt``
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$Connection->delete_object('my-bucket-name', 'goodbye.txt');
|
|
|
|
|
|
Download an Object (to a file)
|
|
------------------------------
|
|
|
|
This downloads the object ``poetry.pdf`` and saves it in
|
|
``/home/larry/documents/``
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
$FileHandle = fopen('/home/larry/documents/poetry.pdf', 'w+');
|
|
$Connection->get_object('my-bucket-name', 'poetry.pdf', array(
|
|
'fileDownload' => $FileHandle,
|
|
));
|
|
|
|
|
|
Generate Object Download URLs (signed and unsigned)
|
|
---------------------------------------------------
|
|
|
|
This generates an unsigned download URL for ``hello.txt``.
|
|
This works because we made ``hello.txt`` public by setting
|
|
the ACL above. This then generates a signed download URL
|
|
for ``secret_plans.txt`` that will work for 1 hour.
|
|
Signed download URLs will work for the time period even
|
|
if the object is private (when the time period is up,
|
|
the URL will stop working).
|
|
|
|
.. code-block:: php
|
|
|
|
<?php
|
|
my $plans_url = $Connection->get_object_url('my-bucket-name', 'hello.txt');
|
|
echo $plans_url . "\n";
|
|
my $secret_url = $Connection->get_object_url('my-bucket-name', 'secret_plans.txt', '1 hour');
|
|
echo $secret_url . "\n";
|
|
|
|
The output of this will look something like::
|
|
|
|
http://objects.dreamhost.com/my-bucket-name/hello.txt
|
|
http://objects.dreamhost.com/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX
|
|
|