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.

1. Kurulum ve Yapılandırma

Eklentiyi kurmak için terminalinize şu komutu girin:

terminal
$ artiframe add s3

Ardından .env dosyanıza Storage sağlayıcınızdan aldığınız erişim bilgilerini girin:

.env
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
Geniş Uyumluluk: 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.
2. Dosya Yükleme (Upload)

Sunucunuzdaki fiziksel bir dosyayı buluta aktarmak veya metin tabanlı verileri direkt (temp dosya oluşturmadan) buluta yazmak mümkündür.

1. Fiziksel Dosya Yükleme
example.php
<?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'];
}
2. String / Raw Data Yükleme

Bazen dinamik oluşturduğunuz bir JSON, CSV veya HTML verisini diske kaydetmeden direkt buluta göndermeniz gerekir.

example.php
<?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');
3. Link Oluşturma (Public & Private)
Public (Herkese Açık) URL

Dosyayı public yetkisiyle yüklediyseniz (Örn: Logolar, CSS dosyaları):

example.php
<?php
$publicUrl = $s3->url('users/avatars/1.jpg');
// Çıktı: https://bucket-adi.s3.eu-central-1.amazonaws.com/users/avatars/1.jpg
Pre-Signed (Geçici Süreli) URL

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.

example.php
<?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>";
4. İndirme (Download) ve Silme (Delete)

Buluttaki verileri sunucunuza çekmek veya buluttan silmek (yer kazanmak) için.

example.php
<?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'
]);
5. Dosya Yönetimi ve Kontrol Metotları
MetotParametrelerAçı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.