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;
}
}