Начало работы с 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."<br />";
}
Привет, мир
Теперь, когда у нас есть ведро, мы готовы покорить мир. В следующем примере показано, как создать простой текстовый файл в корзине 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 "body" 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 "fileUpload" 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 "body" 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__, "newImage");
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 "body" 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 "fileUpload" 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