Skip to main content

AWS SDK for PHP

The AWS SDK for PHP v3 works with Filebase via the endpoint and region options.

Install

composer require aws/aws-sdk-php

Initialize the client

filebase.php
<?php

use Aws\S3\S3Client;

$s3 = new S3Client([
'version' => 'latest',
'region' => 'auto',
'endpoint' => 'https://s3.filebase.io',
'credentials' => [
'key' => getenv('FILEBASE_KEY'),
'secret' => getenv('FILEBASE_SECRET'),
],
]);

List buckets

$result = $s3->listBuckets();

foreach ($result['Buckets'] as $bucket) {
echo $bucket['Name'] . PHP_EOL;
}

Create a bucket

$s3->createBucket(['Bucket' => 'my-bucket']);

// Public
$s3->createBucket([
'Bucket' => 'my-public-bucket',
'ACL' => 'public-read',
]);

Upload an object

$s3->putObject([
'Bucket' => 'my-bucket',
'Key' => 'photo.jpg',
'SourceFile' => './photo.jpg',
'ContentType' => 'image/jpeg',
'CacheControl' => 'public, max-age=31536000',
]);

For large files, use the multipart uploader:

use Aws\S3\MultipartUploader;
use Aws\Exception\MultipartUploadException;

$uploader = new MultipartUploader($s3, './video.mp4', [
'bucket' => 'my-bucket',
'key' => 'video.mp4',
'part_size' => 8 * 1024 * 1024, // 8 MB
'concurrency' => 4,
]);

try {
$result = $uploader->upload();
} catch (MultipartUploadException $e) {
echo $e->getMessage() . PHP_EOL;
}

List objects

$paginator = $s3->getPaginator('ListObjectsV2', [
'Bucket' => 'my-bucket',
'Prefix' => 'photos/',
]);

foreach ($paginator as $result) {
foreach ($result['Contents'] ?? [] as $obj) {
echo "{$obj['Key']} {$obj['Size']}" . PHP_EOL;
}
}

Download an object

$s3->getObject([
'Bucket' => 'my-bucket',
'Key' => 'photo.jpg',
'SaveAs' => './downloaded.jpg',
]);

// Or to memory
$result = $s3->getObject([
'Bucket' => 'my-bucket',
'Key' => 'photo.jpg',
]);
$data = (string) $result['Body'];

Delete an object

$s3->deleteObject([
'Bucket' => 'my-bucket',
'Key' => 'photo.jpg',
]);

Pre-signed URLs

$cmd = $s3->getCommand('GetObject', [
'Bucket' => 'my-bucket',
'Key' => 'private.pdf',
]);

$request = $s3->createPresignedRequest($cmd, '+1 hour');
$url = (string) $request->getUri();

echo $url . PHP_EOL;

// Pre-signed PUT
$cmd = $s3->getCommand('PutObject', [
'Bucket' => 'uploads',
'Key' => "user-{$userId}/{$filename}",
'ContentType' => 'image/jpeg',
]);
$uploadUrl = (string) $s3->createPresignedRequest($cmd, '+10 minutes')->getUri();

Error handling

use Aws\Exception\AwsException;

try {
$s3->headObject([
'Bucket' => 'my-bucket',
'Key' => 'missing.jpg',
]);
} catch (AwsException $e) {
if ($e->getAwsErrorCode() === 'NotFound') {
// handle missing
} else {
throw $e;
}
}

What's next