Статьи

Начало работы с AWS PHP SDK

Начало работы с AWS PHP SDK

Amazon AWS S3 — это надежное решение для хранения данных в Интернете. Его можно использовать для хранения и извлечения любого количества данных в любое время из любой точки сети. С S3 вы получаете доступ к легко масштабируемой, надежной, безопасной, быстрой и недорогой инфраструктуре для вашего веб-приложения.

В ближайшие недели я создам серию учебных пособий, которые покажут вам, как делать удивительные вещи, используя Amazon S3 и другие сервисы Amazon AWS. Эта статья предназначена для того, чтобы вы могли начать пользоваться Amazon Web Services.

Amazon предоставил мощную поддержку SDK для множества различных платформ, включая PHP. В этой статье вы узнаете, как начать использовать AWS SDK для PHP, используя практические примеры.

Предпосылки

Большинство веб-хостов имеют установку PHP, которая будет поддерживать SDK без какой-либо дополнительной настройки, но если у вас возникнут проблемы с каким-либо из приведенных ниже примеров, обратитесь к разделу Ресурсы в конце этой статьи.

В дополнение к обычному старому веб-хостингу вам также потребуется учетная запись Amazon AWS. Установите один на: http://aws.amazon.com

Кроме того, вам необходимо убедиться, что в вашей учетной записи включена служба Amazon AWS S3. Все мои примеры будут использовать этот сервис.

Установка и настройка

1) Скачать
Начните с получения файлов SDK на вашем веб-сервере. Есть несколько способов сделать это. Мой фаворит — скачать SDK и загрузить файлы на ваш веб-сервер. Легко, правда? Вы также можете использовать PEAR и несколько других методов для установки SDK. Вы можете скачать последнюю версию здесь: http://pear.amazonwebservices.com/get/sdk-latest.zip

Для целей этой статьи я собираюсь загрузить SDK в папку в корневом каталоге моего веб-сайта под названием «awssdk».

2) Переименуйте файл конфигурации

Как только ваши файлы загружены, вам необходимо обновить файл конфигурации. Первым шагом является изменение имени файла конфигурации с config-sample.inc.php на: config.inc.php

3) Настройки файла конфигурации
Теперь откройте файл конфигурации и введите свои учетные данные. В этом файле определено 10 или более констант. На данный момент вам нужно обновить только три из них:

define('AWS_KEY', 'ENTER YOUR AWS KEY HERE');
define('AWS_SECRET_KEY', 'ENTER YOUR AWS SECRET KEY HERE');
define('AWS_ACCOUNT_ID', 'ENTER YOUR AWS ACCOUNT ID HERE');

Найти эти значения легко:

  • Просто войдите в консоль управления AWS.
  • Нажмите «Аккаунт» в самом верхнем меню навигации.
  • Нажмите «Учетные данные безопасности».
  • Прокрутите вниз, чтобы найти свой ключ AWS и секретный ключ. Ваш Секретный Ключ будет скрыт, пока вы не нажмете «Просмотр».
  • Прокрутите вниз еще дальше, чтобы найти номер вашей учетной записи.

Привет Ведра

Начните с создания файла с именем fun.php в той же папке, куда я загрузил SDK. Итак, вот как должна выглядеть ваша структура каталогов:

 /awssdk/sdk.class.php
/awssdk/config.inc.php
/awssdk/fun.php
/awssdk/utilities
/awssdk/services
/awssdk/lib
/awssdk/extensions
/awssdk/.... (a few more directories)

Мы будем делать все наше кодирование в fun.php

1) Включите AWS SDK

Чтобы использовать SDK, его нужно включить в наш код PHP. Если вы настроили файловую структуру, как я продемонстрировал выше, следующий код должен работать, чтобы включить SDK:

 <?php
require_once 'sdk.class.php';

2) Создать ведро

Самый простой тест, который вы можете выполнить в AWS SDK, — это создать корзину в S3. S3 bucket — это «домен» для хранения файлов. Как только у нас появится ведро, мы можем начать создавать, редактировать и удалять файлы с помощью PHP. Вот код:

 <?php
require_once 'sdk.class.php';

// Create the s3 Object from the SDK
$s3 = new AmazonS3();

// Run the Method: Create Bucket.
// Arg 1: 'my-unique-bucket-name' is the name of your new bucket.
// Arg 2: The geographical region where your data will be stored.
// Arg 3: Tells Amazon to make your files readable by anyone like regular files hosted on a web server.
$response = $s3->create_bucket('my-unique-bucket-name', AmazonS3::REGION_US_E1, AmazonS3::ACL_PUBLIC);

// The response comes back as a Simple XML Object
// In this case we just want to know if everything was okay.
// If not, report the message from the XML response.
if ((int) $response->isOK()) {
    echo 'Created Bucket';
} else {
    echo (string) $response->body->Message;
}

Вот несколько вещей, которые следует помнить при создании сегментов S3:

  • Имена сегментов используются для доменных имен, поэтому вы можете использовать только цифры, буквы и тире.
  • Названия корзин должны быть уникальными для всех пользователей Amazon AWS. Другими словами, ‘my-unique-bucket-name’ уже занято (мной), поэтому вам нужно выбрать свои собственные уникальные имена сегментов.

2) Список ведер

Теперь, когда вы создали группу, вы можете использовать следующий пример, чтобы перечислить все группы в своей учетной записи:

 <?php
$s3 = new AmazonS3();
$response = $s3->list_buckets();
foreach ($response->body->Buckets[0] as $bucket) {
    echo (string) $bucket->Name.&quot;<br />&quot;;
}

Привет, мир

Теперь, когда у нас есть ведро, мы готовы покорить мир. В следующем примере показано, как создать простой текстовый файл в корзине AWS:

 <?php
require_once 'sdk.class.php';
$s3 = new AmazonS3();

// Create Object is pretty self explanatory:
// Arg 1: The bucket where your file will be created.
// Arg 2: The name of your file.
// Arg 3: An array of Options.
//        In this case we're specifying the &quot;body&quot; option
//        and the ACL setting to allow this file to be read by anyone.
$response = $s3->create_object('my-unique-bucket-name', 'test1.txt', array(
'body' => 'Hello world. Nice to meet you.',
'acl'=>AmazonS3::ACL_PUBLIC,
));

if ((int) $response->isOK()) echo 'I Created a File!';

Чтобы проверить, загружен ли ваш файл, попробуйте получить к нему доступ, используя его URL: http://your-unique-bucket-name-here.s3.amazonaws.com/test1.txt

Вариант использования 1: доставка публичного контента

Основное использование сервиса Amazon S3 — хранение и доставка веб-контента, такого как изображения, видео и другие медиафайлы. С помощью S3 вы можете обслуживать любой вид контента, включая потоковое видео и обычные веб-страницы HTML. Amazon выполняет всю работу по обеспечению того, чтобы ваши файлы были в безопасности, и чтобы они всегда доставлялись быстро, все, что вам нужно сделать, это поместить ваши файлы в корзину S3!
Мы уже продемонстрировали, как создать простой текстовый файл в S3. Следующие примеры демонстрируют несколько дополнительных опций для загрузки файлов в корзину S3:

1) Загрузить файл с вашего сервера

Для этого примера загрузите файл с именем file.jpg в вашу папку awssdk. Наша цель — загрузить файл с вашего сервера в корзину S3:

 <?php
require_once 'sdk.class.php';
$s3 = new AmazonS3();

// Create Object is pretty self explanatory:
// Arg 1: The bucket where your file will be created.
// Arg 2: The name of your file.
// Arg 3: An array of Options.
//        In this case we're specifying the &quot;fileUpload&quot; option (a file on your server)
//        and the ACL setting to allow this file to be read by anyone.
$response = $s3->create_object('my-unique-bucket-name', 'in_the_cloud.jpg', array(
'fileUpload'=>__DIR__.'/file.jpg',
'acl'=>AmazonS3::ACL_PUBLIC,
));

// Check if everything is okay.
if ((int) $response->isOK()) echo 'I Uploaded a File from My Server!';

Как и в предыдущем примере, вы можете проверить свою загрузку, предварительно просмотрев ее в своем браузере: http://my-unique-bucket-name-here.s3.amazonaws.com/in_the_cloud.jpg

2) Загрузить файл с другого сайта

Иногда вы хотите получить файл с другого URL в S3. Это действительно легко:

 <?php
require_once 'sdk.class.php';
$s3 = new AmazonS3();

// Create Object is pretty self explanatory:
// Arg 1: The bucket where your file will be created.
// Arg 2: The name of your file.
// Arg 3: An array of Options.
//        In this case we're specifying the &quot;body&quot; option (opening a file from the web),
//        we're setting the contentType of the file so browsers know its an image,
//        and we're setting the ACL setting to allow this file to be read by anyone.
$response = $s3->create_object('my-unique-bucket-name', 'from_a_url.gif', array(
'body'=>file_get_contents('http://www.google.com/logos/logo_newyear.gif'),
'contentType'=>'image/gif',
'acl'=>AmazonS3::ACL_PUBLIC,
));

// Check if everything is okay.
if ((int) $response->isOK()) echo 'I Uploaded a File from the Web!';

2) Создать миниатюру
Допустим, вы хотите создать миниатюру из изображения, и вы знаете URL-адрес изображения. Этот пример будет работать:

 <?php
require_once 'sdk.class.php';
$s3 = new AmazonS3();

// Create a thumbnail from a URL
$originalImage = imagecreatefromgif('http://www.google.com/logos/logo_newyear.gif');
$new_height = 30;
$width = imagesx($originalImage);
$height = imagesy($originalImage);
$new_width = round(($width * $new_height) / $height);
$imageResized = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($imageResized, $originalImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Save the image in a temp file.
$tempfilename = tempnam(__DIR__, &quot;newImage&quot;);
ImageJpeg($imageResized,$tempfilename,100);

// Create Object is pretty self explanatory:
// Arg 1: The bucket where your file will be created.
// Arg 2: The name of your file.
// Arg 3: An array of Options.
//        In this case we're specifying the &quot;body&quot; option (opening the temp image file we created),
//        we're setting the contentType of the file so browsers know its an image,
//        and we're setting the ACL setting to allow this file to be read by anyone.
$response = $s3->create_object('my-unique-bucket-name', 'from_php_script.jpg', array(
'body'=>file_get_contents($tempfilename),
'contentType'=>'image/jpeg',
'acl'=>AmazonS3::ACL_PUBLIC,
));

// Delete the temporary file.
unlink($tempfilename);

// Check if everything is okay.
if ((int) $response->isOK()) echo 'I Uploaded a File Created with PHP!';

Вариант использования 2: доставка защищенного контента

В некоторых случаях вы хотите добавить немного безопасности изображениям, которые хранятся в вашем магазине на S3. S3 предоставляет несколько способов повысить безопасность, но одним из самых простых способов является создание ограниченных по времени URL-адресов.

Сгенерированные по времени URL-адреса легко генерируются, и они позволяют пользователям загружать контент с использованием безопасного URL-адреса, срок действия которого истекает, как только вы этого захотите. В некоторых случаях вы можете захотеть, чтобы срок действия вашего контента истек через несколько минут.
Это прекрасно работает для отображения защищенных изображений на веб-сайте. В других случаях вы можете разрешить загрузку файла в течение нескольких дней или недель, что может быть лучше при доставке ссылок на загрузки по электронной почте.

Первым шагом в создании защищенного файла является загрузка файла, к которому по умолчанию нет доступа в Интернете:

 <?php
require_once 'sdk.class.php';
$s3 = new AmazonS3();

// Create Object is pretty self explanatory:
// Arg 1: The bucket where your file will be created.
// Arg 2: The name of your file.
// Arg 3: An array of Options.
//        In this case we're specifying the &quot;fileUpload&quot; option (a file on your server)
//        and the ACL setting to prevent this file from being read by anyone on the interent.
$response = $s3->create_object('my-unique-bucket-name', 'in_the_cloud_private.jpg', array(
'fileUpload'=>__DIR__.'/file.jpg',
'acl'=>AmazonS3::ACL_PRIVATE,
));

// Check if everything is okay.
if ((int) $response->isOK()) echo 'I Uploaded a PRIVATE File from My Server!';

Обычный URL этого файла: http://my-unique-bucket-name.s3.amazonaws.com/in_the_cloud_private.jpg

Но если вы попробуете этот URL, вы получите ошибку отказа в доступе. Это хорошо, потому что мы хотим, чтобы этот файл был защищен. Но скажем, мы хотели отправить ссылку на этот файл кому-то по электронной почте. Мы хотим упростить их загрузку, но мы не хотим, чтобы эта ссылка появлялась на каком-либо форуме, где она может быть в любое время загружена кем-либо.
Решением является создание ссылки на файл, срок действия которого истекает через 24 часа. Вот как это просто:

 <?php
require_once 'sdk.class.php';
$s3 = new AmazonS3();

//Generate a Secure URL
$secureURl = $s3->get_object_url(
    'my-unique-bucket-name',
    'in_the_cloud.jpg',
    '24 Hours'
);

echo $secureURl;

При этом будет создан URL-адрес, который выглядит следующим образом: http://my-unique-bucket-name.s3.amazonaws.com/in_the_cloud.jpg?AWSAccessKeyId=AKIAINUIRH7EHMGFBWQQ&Expires=1313027791&Signature=G2IlL3fWpi0MyNeF2pl

Эта ссылка обеспечит доступ к файлу в течение 24 часов, после чего пользователь получит ошибку «Отказано в доступе».

Неограниченные возможности

Надеемся, что после того, как вы попробуете эти примеры, вам будет удобно создавать и получать доступ к файлам с помощью сервиса хранилища Amazon S3.

Мы только поцарапали поверхности того, что возможно. В ближайшие недели я подробно расскажу о многих способах использования S3 для создания удивительных вещей с помощью ваших веб-сайтов и веб-приложений.

Если у вас есть вопросы или предложения по использованию S3, как я описал, откройте обсуждение ниже!

AWS SDK РЕСУРСЫ ДЛЯ PHP

Изображение через Kentoh / Shutterstock