English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Giriş
- Kurulum
- Kullanım
- Üreticiler
- İleri Düzey Kullanım
- Yapılandırma
- Destek Kılavuzları
- Lisans - MIT Lisansı
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
- Yüksek Performanslı Eşzamanlılık: Paralel dosya oluşturma için Swoole (koşut işlemler) ve PCNTL (iş forking) arasında otomatik seçim
- Birden Fazla Dosya Üreticisi: Görüntüler, metin, CSV, ikili ve e-posta dosyaları için yerleşik destek
- Belirleyici Çıktı: Tohum bazlı üretim ile tekrarlanabilir sonuçlar
- Esnek Depolama: Herhangi bir League Flysystem adaptörü (yerel, S3 vb.) ile çalışır
- Özelleştirilebilir Dosya İsimlendirmesi: Tam kontrol ile closure tabanlı isimlendirme
- Görüntü Desteği: Konfigüre edilebilir boyutlar ve sıkıştırma ile birden fazla format
- E-posta Oluşturma: Ekli dosyalar ve MIME desteği ile RFC822 uyumlu e-postalar
Ö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 ileFaker::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şturunuse 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şturunuse 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
- PHP >= 8.4
- ext-gd (görüntü oluşturma için)
- ext-swoole (isteğe bağlı, daha iyi performans için)
- ext-pcntl (eşzamanlılık için yedek)
İ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:
- Bir üretici ile bir Faker örneği oluşturun
- Üreticiyi yapılandırın (isteğe bağlı)
- Depolama yerini belirleyin
- Eşzamanlılık ve sayıyı yapılandırın
- 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ınFaker::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ınFaker::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.pngFaker::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ırmaNameGenerator::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ş closureFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Tarih bazlı isimlendirmeFaker::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:
To: Rastgele ad ve e-postaFrom: Rastgele ad ve e-postaSubject: Rastgele cümleDate: Geçerli zaman damgasıMessage-ID: Tohum bazlı belirleyici ID
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 tomorrowDate: Fri, 03 Jan 2026 10:30:00 +0000Message-ID: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>Content-Type: multipart/mixed; boundary="----=_Part_123" ------=_Part_123Content-Type: text/plain; charset=utf-8Content-Transfer-Encoding: quoted-printable Lorem ipsum dolor sit amet, consectetur adipiscing elit... ------=_Part_123Content-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ınFaker::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ı
- Swoole Kullanın: En iyi performans için Swoole uzantısını yükleyin
- Eşzamanlılığı Ayarlayın: En iyi verim için iş parçacığı sayısını CPU çekirdeklerine eşleştirin
- Toplu İşlemler: Birden fazla küçük çalıştırma yerine büyük toplu oluşturun
- Depolama Yeri: Geçici dosyalar için hızlı depolama kullanın (SSD, yerel disk) ve yüklemeden önce kullanın
- 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ıkFaker::make(Png::class) ->concurrency(4) // Swoole'a özgü: eşzamanlı iş parçacıkları ve koşutlarFaker::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.