Defective Code Logo

Total Downloads Latest Stable Version Latest Stable Version

English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文

Giriş

Faker Storage, büyük hacimlerde sahte veri dosyaları oluşturmak ve depolamak için etkili bir şekilde tasarlanmış yüksek performanslı bir PHP paketidir. Eşzamanlılığı göz önünde bulundurarak inşa edilen bu paket, binlerce dosyayı paralel olarak oluşturmak için Swoole veya PCNTL kullanır; bu sayede yük testleri, geliştirme ortamları ve depolama sistemi benchmark'ları için idealdir.

Paket, görüntüler (PNG, JPG, GIF, BMP, WEBP, AVIF), metin dosyaları, CSV dosyaları, ikili veriler ve RFC822 uyumlu e-postalar dahil olmak üzere çeşitli dosya türleri oluşturmak için akıcı bir API sağlar. Her bir üretici, tohum kullanıldığında belirleyici çıktı üretir ve bu sayede ortamlar arasında tekrarlanabilir test verileri sağlar.

Ana Özellikler

Örnek

use DefectiveCode\Faker\Faker;
use League\Flysystem\Filesystem;
use DefectiveCode\Faker\Generators\Png;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// 1000 PNG resmi oluşturun, 10 eşzamanlı işçi ile
Faker::make(Png::class)
->width(800, 1920)
->height(600, 1080)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage')))
->basePath('images')
->count(1000)
->concurrency(10)
->seed(42)
->generate();
 
// CSV dosyaları oluşturun
use DefectiveCode\Faker\Generators\Csv;
 
Faker::make(Csv::class)
->columns(5, 10)
->rows(100, 500)
->delimiter(',')
->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage')))
->count(50)
->generate();
 
// Ekli dosyalarla e-postalar oluşturun
use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5)
->sentences(2, 4)
->withAttachment(Png::class, 1, 3)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage')))
->count(100)
->generate();

Kurulum

Paketi Composer aracılığıyla yükleyin:

composer require defectivecode/faker-storage

Gereksinimler

İsteğe Bağlı Bağımlılıklar

En iyi performans için Swoole uzantısını yükleyin:

pecl install swoole

Paket, mevcut olduğunda otomatik olarak Swoole kullanacak, aksi takdirde PCNTL'ye geçecektir.

Kullanım

Temel İş Akışı

Tüm üreticiler aynı modeli takip eder:

  1. Bir üretici ile bir Faker örneği oluşturun
  2. Üreticiyi yapılandırın (isteğe bağlı)
  3. Depolama yerini belirleyin
  4. Eşzamanlılık ve sayıyı yapılandırın
  5. Dosyaları oluşturun
use DefectiveCode\Faker\Faker;
use League\Flysystem\Filesystem;
use DefectiveCode\Faker\Generators\Text;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
Faker::make(Text::class)
->paragraphs(5, 10) // Üreticiye özgü yapılandırma
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
->basePath('documents') // Dosyalar /storage/documents/ içinde olacak
->count(100) // 100 dosya oluştur
->concurrency(4) // 4 işçi kullan
->seed(123) // Belirleyici çıktı için
->generate();

Depolama Yapılandırması

Flysystem Kullanarak

Faker Storage, depolama soyutlaması için League Flysystem kullanır:

use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// Yerel depolama
$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage'));
 
Faker::make(Png::class)
->toDisk($filesystem)
->generate();

AWS S3 Depolama

use Aws\S3\S3Client;
use League\Flysystem\Filesystem;
use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
 
$client = new S3Client([
'credentials' => [
'key' => 'your-key',
'secret' => 'your-secret',
],
'region' => 'us-east-1',
'version' => 'latest',
]);
 
$adapter = new AwsS3V3Adapter($client, 'your-bucket-name');
$filesystem = new Filesystem($adapter);
 
Faker::make(Png::class)
->toDisk($filesystem)
->basePath('uploads/images')
->generate();

Disk Seçenekleri

Dosya sistemi adaptörüne ek seçenekler geçin:

Faker::make(Png::class)
->toDisk($filesystem)
->diskOptions([
'visibility' => 'public',
'ACL' => 'public-read',
'CacheControl' => 'max-age=31536000',
])
->generate();

Eşzamanlılık Yapılandırması

Paralel yürütmeyi concurrency() yöntemiyle kontrol edin:

// 10 işçi iş parçacığı/proses kullanın
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Swoole'a özgü: Her iş parçacığında hem iş parçacıklarını hem de koşut işlemleri ayarlayın
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // 4 işçi, her birinde 8 koşut
->generate();

Dosya İsimlendirmesi

Varsayılan İsimlendirme

Varsayılan olarak dosyalar UUID v4 kullanılarak adlandırılır:

// Oluşturulan: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
Faker::make(Png::class)->generate();

Yerleşik İsim Üreticileri

use DefectiveCode\Faker\NameGenerator;
 
// UUID bazlı (varsayılan)
NameGenerator::setDefault('uuid'); // Oluşturulan: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// Ardışık numaralandırma
NameGenerator::setDefault('sequence'); // Oluşturulan: 1.png, 2.png, 3.png, ...

Özelleştirilmiş İsimlendirme

Dosya isimlerini özelleştirmek için bir closure sağlayın:

use DefectiveCode\Faker\NameGenerator;
 
// Özelleştirilmiş closure
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "custom-{$completedFiles}-{$seed}.png";
})
->generate();
 
// Tarih bazlı isimlendirme
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return date('Y/m/d') . "/image-{$completedFiles}.png";
})
->generate();

Tekrar Üretilebilirlik İçin Tohumlama

Aynı dosyaları farklı çalıştırmalarda oluşturmak için bir tohum ayarlayın:

Faker::make(Png::class)
->seed(42)
->count(10)
->generate();

Her dosya, temel tohumdan ve dosya indeksinden türetilen benzersiz belirleyici bir tohuma sahip olur.

Üreticiler

Görüntü Üreticileri

Tüm görüntü üreticileri boyut ve kalite yapılandırmasını destekler.

PNG

use DefectiveCode\Faker\Generators\Png;
 
Faker::make(Png::class)
->width(800, 1920) // 800-1920px arasında rastgele genişlik
->height(600, 1080) // 600-1080px arasında rastgele yükseklik
->withAlpha(true) // Alfa/şeffaflık kanalını etkinleştir
->grid(5) // İsteğe bağlı: 5x5 simetrik desen oluştur
->toDisk($filesystem)
->generate();

JPG

use DefectiveCode\Faker\Generators\Jpg;
 
Faker::make(Jpg::class)
->width(800, 1920) // 800-1920px arasında rastgele genişlik
->height(600, 1080) // 600-1080px arasında rastgele yükseklik
->grid(5) // İsteğe bağlı: 5x5 simetrik desen oluştur
->toDisk($filesystem)
->generate();

GIF

use DefectiveCode\Faker\Generators\Gif;
 
Faker::make(Gif::class)
->width(800, 1920) // 800-1920px arasında rastgele genişlik
->height(600, 1080) // 600-1080px arasında rastgele yükseklik
->withAlpha(true) // Alfa/şeffaflık kanalını etkinleştir
->grid(5) // İsteğe bağlı: 5x5 simetrik desen oluştur
->toDisk($filesystem)
->generate();

BMP

use DefectiveCode\Faker\Generators\Bmp;
 
Faker::make(Bmp::class)
->width(800, 1920) // 800-1920px arasında rastgele genişlik
->height(600, 1080) // 600-1080px arasında rastgele yükseklik
->grid(5) // İsteğe bağlı: 5x5 simetrik desen oluştur
->toDisk($filesystem)
->generate();

WEBP

use DefectiveCode\Faker\Generators\Webp;
 
Faker::make(Webp::class)
->width(800, 1920) // 800-1920px arasında rastgele genişlik
->height(600, 1080) // 600-1080px arasında rastgele yükseklik
->withAlpha(true) // Alfa/şeffaflık kanalını etkinleştir
->grid(5) // İsteğe bağlı: 5x5 simetrik desen oluştur
->toDisk($filesystem)
->generate();

AVIF

use DefectiveCode\Faker\Generators\Avif;
 
Faker::make(Avif::class)
->width(800, 1920) // 800-1920px arasında rastgele genişlik
->height(600, 1080) // 600-1080px arasında rastgele yükseklik
->withAlpha(true) // Alfa/şeffaflık kanalını etkinleştir
->grid(5) // İsteğe bağlı: 5x5 simetrik desen oluştur
->toDisk($filesystem)
->generate();

Rastgele Görüntü

Rastgele bir görüntü formatı üretir:

use DefectiveCode\Faker\Generators\RandomImage;
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(false) // Rastgele: AVIF, BMP, GIF, JPEG, PNG, WEBP
->toDisk($filesystem)
->generate();
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(true) // Rastgele: AVIF, GIF, PNG, WEBP
->toDisk($filesystem)
->generate();

Metin Üretici

Paragraflarla düz metin dosyaları oluşturun:

use DefectiveCode\Faker\Generators\Text;
 
Faker::make(Text::class)
->paragraphs(5, 10) // Dosya başına 5-10 paragraf
->sentences(3, 6) // Her paragrafta 3-6 cümle
->toDisk($filesystem)
->generate();

Çıktı Örneği:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
 
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

CSV Üretici

Rastgele verilerle CSV dosyaları oluşturun:

use DefectiveCode\Faker\Generators\Csv;
 
Faker::make(Csv::class)
->columns(5, 10) // 5-10 sütun
->rows(100, 500) // 100-500 satır
->delimiter(',') // Sütün ayırıcı
->enclosure('"') // Alan kapsayıcı
->escape('\\') // Kaçış karakteri
->eol("\n") // Satır sonu
->toDisk($filesystem)
->generate();

Çıktı Örneği:

"John Doe","john@example.com","555-1234","New York","Engineer"
"Jane Smith","jane@example.com","555-5678","Los Angeles","Designer"
"Bob Johnson","bob@example.com","555-9012","Chicago","Manager"

İkili Üretici

Rastgele ikili veriler oluşturun:

use DefectiveCode\Faker\Generators\Binary;
 
Faker::make(Binary::class)
->length(1024, 1048576) // 1KB - 1MB
->toDisk($filesystem)
->generate();

E-posta Üretici

RFC822 uyumlu e-posta dosyaları oluşturun:

use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5) // E-posta gövdesinde paragraflar
->sentences(2, 4) // Her paragrafta cümleler
->withAttachment(Png::class, 1, 3) // 1-3 PNG eki ekleyin
->toDisk($filesystem)
->generate();

E-posta Başlıkları

Oluşturulan e-postalar şunları içerir:

Eklere Sahip E-posta

Dosyaları, üretici sınıf adları veya örnekleri kullanarak ekleyin:

use DefectiveCode\Faker\Generators\Email;
use DefectiveCode\Faker\Generators\Png;
use DefectiveCode\Faker\Generators\Pdf;
 
Faker::make(Email::class)
->withAttachment(Png::class, 1, 3) // 1-3 PNG eki
->generate();
 
// Yapılandırılmış üretici örneğini kullanarak ekleyin
$pngGenerator = new Png(Png::getDefaultConfig());
$pngGenerator->width(400, 800)->height(300, 600);
 
Faker::make(Email::class)
->withAttachment($pngGenerator, 2, 5)
->generate();

Çıktı Örneği:

To: John Doe <john.doe@example.com>
From: Jane Smith <jane.smith@example.com>
Subject: Important meeting tomorrow
Date: Fri, 03 Jan 2026 10:30:00 +0000
Message-ID: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>
Content-Type: multipart/mixed; boundary="----=_Part_123"
 
------=_Part_123
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
 
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
 
------=_Part_123
Content-Type: image/png; name="attachment.png"
Content-Disposition: attachment; filename="attachment.png"
Content-Transfer-Encoding: base64
 
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==
------=_Part_123--

İleri Düzey Kullanım

Özelleştirilmiş Üreticiler

Kendi üreticilerinizi oluşturmak için Generator arayüzünü uygulayın:

use DefectiveCode\Faker\Configs\Config;
use DefectiveCode\Faker\Concerns\SetsSeed;
use DefectiveCode\Faker\Generators\Generator;
use DefectiveCode\Faker\Concerns\PreparesFaker;
 
class MyCustomGenerator implements Generator
{
use PreparesFaker;
use SetsSeed;
 
public function __construct(public Config $config) {}
 
public static function getDefaultConfig(): Config
{
return new MyCustomConfig([
'contentType' => 'application/x-custom',
'nameGenerator' => NameGenerator::default('extension'),
]);
}
 
public function generate(): mixed
{
// Üretim mantığınız buraya
$data = $this->faker->randomElement(['foo', 'bar', 'baz']);
 
$stream = fopen('php://temp', 'w+');
fwrite($stream, $data);
 
return $stream;
}
}
 
// Özelleştirilmiş üreticinizi kullanın
Faker::make(MyCustomGenerator::class)
->toDisk($filesystem)
->generate();

Yapılandırma Sınıfları

Her üretici, Config'ten türeyen bir yapılandırma sınıfı kullanır:

use DefectiveCode\Faker\Configs\Config;
 
class MyCustomConfig extends Config
{
public int $minValue = 1;
public int $maxValue = 100;
}

Performans İpuçları

  1. Swoole Kullanın: En iyi performans için Swoole uzantısını yükleyin
  2. Eşzamanlılığı Ayarlayın: En iyi verim için iş parçacığı sayısını CPU çekirdeklerine eşleştirin
  3. Toplu İşlemler: Birden fazla küçük çalıştırma yerine büyük toplu oluşturun
  4. Depolama Yeri: Geçici dosyalar için hızlı depolama kullanın (SSD, yerel disk) ve yüklemeden önce kullanın
  5. Ağ I/O: S3 kullanırken, bant genişliği kullanımını maksimize etmek için eşzamanlılığı artırın

Yapılandırma

Küresel Yapılandırma Yöntemleri

Bu yöntemler tüm Faker örneklerinde mevcuttur:

make(string $generator): Faker

Belirtilen üretici ile yeni bir Faker örneği oluşturun:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

Depolama yerini belirleyin (zorunlu):

Faker::make(Png::class)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))

basePath(string $basePath): Faker

Dosya sistemindeki temel yolu ayarlayın:

Faker::make(Png::class)
->basePath('images/uploads') // Dosyalar /storage/images/uploads/ içinde depolanır

count(int $count): Faker

Oluşturulacak dosya sayısını ayarlayın:

Faker::make(Png::class)
->count(1000)

concurrency(int $threads, ?int $coroutines = null): Faker

Paralel yürütmeyi yapılandırın:

// Temel eşzamanlılık
Faker::make(Png::class)
->concurrency(4)
 
// Swoole'a özgü: eşzamanlı iş parçacıkları ve koşutlar
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8)

seed(int $seed): Faker

Belirleyici üretim için tohum ayarlayın:

Faker::make(Png::class)
->seed(42)

nameGenerator(Closure $generator): Faker

Dosya isimlendirmesini özelleştirin:

Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "file-{$completedFiles}.png";
})

diskOptions(array $diskOptions): Faker

Dosya sistemi adaptörüne seçenekler geçin:

Faker::make(Png::class)
->diskOptions([
'visibility' => 'public',
'ACL' => 'public-read',
])

generate(): void

Dosya oluşturma işlemini gerçekleştirin:

Faker::make(Png::class)->generate();

Destek Kılavuzları

Açık kaynak paketimizi seçtiğiniz için teşekkürler! Lütfen bu destek kılavuzlarına bir göz atmak için biraz zaman ayırın. Bu kılavuzlar, projemizden en iyi şekilde yararlanmanıza yardımcı olacaktır.

Topluluk Tarafından Destek

Açık kaynak projemiz, harika topluluğumuz tarafından destekleniyor. Sorularınız varsa veya yardıma ihtiyacınız varsa, StackOverflow ve diğer çevrimiçi kaynaklar en iyi seçeneklerinizdir.

Hatalar ve Özellik Önceliklendirmesi

Açık kaynak projesini yönetmenin gerçeği, bildirilmiş olan her hata veya özellik talebini hemen ele alamayacağımızdır. Sorunları aşağıdaki sırayla önceliklendiriyoruz:

1. Ücretli Ürünlerimizi Etkileyen Hatalar

Ücretli ürünlerimizi etkileyen hatalar her zaman en yüksek önceliğimiz olacaktır. Bazı durumlarda, yalnızca bizim doğrudan etkilendiğimiz hataları ele alabiliriz.

2. Topluluk Çekme Talepleri

Bir hata tespit ettiyseniz ve bir çözümünüz varsa, lütfen bir çekme talebi gönderin. Ürünlerimizi etkileyen sorunlardan sonra, bu topluluk odaklı düzeltmelere en yüksek önceliği veriyoruz. İncelendikten ve onaylandıktan sonra, çözümünüzü birleştirecek ve katkınızı takdir edeceğiz.

3. Finansal Destek

Belirtilen kategorilerin dışındaki sorunlar için, çözümünü finanse etmeyi tercih edebilirsiniz. Her açık sorun, maddi katkıda bulunabileceğiniz bir sipariş formuna bağlıdır. Bu sorunları sağlanan finansman miktarına göre önceliklendiriyoruz.

Topluluk Katkıları

Açık kaynak, topluluğu aktif olduğunda gelişir. Hataları düzeltmiyor olsanız bile, kod iyileştirmeleri, belgeleri güncellemeler, öğreticiler aracılığıyla veya topluluk kanallarında başkalarına yardımcı olarak katkıda bulunmayı düşünün. Herkesi, bir topluluk olarak, açık kaynak çalışmalarını desteklemeye teşvik ediyoruz.

Tekrar belirtmek gerekirse, DefectiveCode, hataları nasıl etkilediklerine göre önceliklendirecektir; bu, ücretli ürünlerimize etkisi, topluluk çekme talepleri ve sorunlar için alınan finansal desteği içermektedir.

Lisans - MIT Lisansı

Telif Hakkı © Defective Code, LLC. Tüm hakları saklıdır

Bu yazılım ve ilgili belge dosyalarının (bundan böyle "Yazılım" olarak anılacaktır) bir kopyasını edinen herhangi bir kişiye, Yazılım'da kısıtlama olmaksızın işlem yapma izni verilmiştir; bu izin, Yazılım'ı kullanma, kopyalama, değiştirme, birleştirme, yayımlama, dağıtma, alt lisans verme ve/veya Yazılım'ın kopyalarını satma haklarını da içermektedir ve Yazılım'ın sağlandığı kişilerin bunu yapmasına izin verilmektedir; ancak, aşağıdaki koşullara tabi olacaktır:

Yukarıdaki telif hakkı bildirimi ve bu izin bildirimi, Yazılım'ın tüm kopyalarında veya önemli kısımlarında yer almalıdır.

YAZILIM "OLDUĞU GİBİ" SAĞLANMAKTADIR; HERHANGİ BİR TÜRDE, AÇIK YA DA ZIMNİ, SATILABİLİRLİK, BELİRLİ BİR AMACA UYGUNLUK VEYA HUKUKİ İHLAL GARANTİSİ DE DAHİL OLMAK ÜZERE HİÇBİR GARANTİ VERMEZ. YAZARLAR VEYA TELİF HAKKI SAHİPLERİ, YAZILIM’DAN veya YAZILIM'IN KULLANIMI veya DİĞER İŞLEMLERİNDEN KAYNAKLANAN HERHANGİ BİR TALEP, ZARAR VEYA DİĞER YÜKÜMDÜRLÜKLERDEN SORUMLU TUTULAMAZ; İSTER SÖZLEŞME TASARISI, SORUMLULUK, YA DA BAŞKA BİR ŞEKİLDE OLSUN.