Amazon S3 (Cloud Depolama)
artiframe add s3 eklentisi, projelerinizi yerel dosya sisteminin sınırlarından (disk dolması, yedekleme maliyetleri) kurtarıp AWS S3, DigitalOcean Spaces, MinIO veya Cloudflare R2 gibi Object Storage sunucularına bağlar.
İşlemleri karmaşık aws/aws-sdk-php paketinden alıp src/Service/S3Storage.php altında pürüzsüz metotlara çevirir.
Eklentiyi kurmak için terminalinize şu komutu girin:
$ artiframe add s3
Ardından .env dosyanıza Storage sağlayıcınızdan aldığınız erişim bilgilerini girin:
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_DEFAULT_REGION=eu-central-1
AWS_BUCKET=my-app-storage
# Opsiyonel: AWS S3 harici bir servis (MinIO, DO Spaces) kullanıyorsanız:
# AWS_ENDPOINT=https://fra1.digitaloceanspaces.com
AWS_ENDPOINT değişkenini doldurduğunuz anda ArtiFrame S3 servisi otomatik olarak S3-uyumlu herhangi bir bulut sağlayıcısına (Cloudflare R2, Minio vb.) entegre çalışmaya başlar.
Sunucunuzdaki fiziksel bir dosyayı buluta aktarmak veya metin tabanlı verileri direkt (temp dosya oluşturmadan) buluta yazmak mümkündür.
<?php
use Src\Service\S3Storage;
$s3 = new S3Storage();
// Yerel sunucudaki avatar.jpg dosyasını, bulutta 'users/avatars/1.jpg' olarak kaydet
// 3. Parametre (public-read) dosyanın dışarıdan direkt URL ile okunabilmesini sağlar
$result = $s3->upload('/var/www/tmp/avatar.jpg', 'users/avatars/1.jpg', 'public-read');
if ($result['status'] === true) {
echo "Yüklendi! URL: " . $result['url'];
} else {
echo "Hata: " . $result['error'];
}
Bazen dinamik oluşturduğunuz bir JSON, CSV veya HTML verisini diske kaydetmeden direkt buluta göndermeniz gerekir.
<?php
$json = json_encode(['isim' => 'Ali', 'yas' => 30]);
// Diskte dosya oluşturmadan direkt string'i buluta yaz (application/json)
$result = $s3->uploadFromString($json, 'exports/data.json', 'application/json', 'private');
Dosyayı public yetkisiyle yüklediyseniz (Örn: Logolar, CSS dosyaları):
<?php
$publicUrl = $s3->url('users/avatars/1.jpg');
// Çıktı: https://bucket-adi.s3.eu-central-1.amazonaws.com/users/avatars/1.jpg
Gizli dosyalar (Örn: Satın alınmış e-kitap, kişisel fatura) için URL'nin süresi bitince ulaşılamamasını sağlayan güvenli bağlantılardır.
<?php
// Bu link sadece 15 dakika boyunca erişilebilir olur
$temporaryLink = $s3->signedUrl('private/invoices/INV-100.pdf', 15);
echo "<a href='{$temporaryLink}'>Faturayı İndir</a>";
Buluttaki verileri sunucunuza çekmek veya buluttan silmek (yer kazanmak) için.
<?php
// 1. Buluttaki dosyayı yerel sunucuya indir
$s3->download('exports/data.json', '/var/www/downloads/data.json');
// 2. Tekil dosya silme
$s3->delete('users/avatars/1.jpg');
// 3. Çoklu silme (Bulk Delete) - S3'ün API limitlerine takılmamak için toplu istek atar
$s3->deleteMany([
'logs/old-log-1.txt',
'logs/old-log-2.txt'
]);
| Metot | Parametreler | Açıklama |
|---|---|---|
| exists() | string remotePath | Dosyanın bulutta olup olmadığını kontrol eder (bool döner). |
| list() | string prefix | Belirtilen klasör altındaki dosyaları listeler. Dizi döner: [ ['key'=>'...', 'size'=>..., 'last_modified'=>'...'], ... ] |
| copy() | string from, string to | Buluttaki bir dosyayı başka bir isme/klasöre kopyalar. |
| move() | string from, string to | Önce kopyalar (copy), sonra eskisini siler (delete). İsmini/Klasörünü değiştirmiş olursunuz. |
| size() | string remotePath | Dosyanın boyutunu byte cinsinden döndürür. Dosyayı indirmeden sadece Header (headObject) ile kontrol ettiği için oldukça hızlıdır. |