English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Giriş
- Kurulum
- Kullanım
- Üreticiler
- Gelişmiş Kullanım
- Yapılandırma
- Destek Kılavuzları
- Lisans - MIT Lisansı
Giriş
Faker Storage büyük hacimlerde sahte veri dosyalarını verimli bir şekilde oluşturmak ve depolamak için tasarlanmış yüksek performanslı bir PHP paketidir. Eşzamanlılık düşünülerek oluşturulmuştur ve Swoole veya PCNTL kullanarak aynı anda binlerce dosya oluşturur. Yük testleri, geliştirme ortamları ve depolama sistemi kıyaslamaları için idealdir.
Paket, resimler (PNG, JPG, GIF, BMP, WEBP, AVIF), metin dosyaları, CSV dosyaları, ikili veriler ve RFC822 uyumlu e-postalar gibi çeşitli dosya türlerini üretmek için akıcı bir API sağlar. Her üretici, tohumlandığında deterministik çıktı üretir ve bu da ortamlarda yeniden üretilebilir test verileri sağlayarak yerinde tutar.
Ana Özellikler
- Yüksek Performanslı Eşzamanlılık: Paralel dosya üretimi için Swoole (koaratinler) ve PCNTL (işlem ayırma) 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
- Deterministik Çıktı: Tohum tabanlı üretim yeniden üretilebilir sonuçlar sağlar
- Esnek Depolama: Herhangi bir League Flysystem adaptörüyle (yerel, S3, vb.) çalışır
- Özelleştirilebilir Dosya İsimlendirme: Tam kontrol ile closure tabanlı adlandırma
- Görüntü Desteği: Konfigüre edilebilir boyutlar ve sıkıştırma ile birden fazla format
- E-posta Oluşturma: Ekler 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; // 10 eşzamanlı işçi ile 1000 PNG resim oluşturFaker::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şturuse 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 e-postalar oluşturuse 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 kurun:
composer require defectivecode/faker-storage
Gereksinimler
- PHP >= 8.4
- ext-gd (görüntü üretimi 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
Optimal performans için Swoole uzantısını kurun:
pecl install swoole
Paket mevcutsa otomatik olarak Swoole kullanacak, aksi takdirde PCNTL'ye geçecektir.
Kullanım
Temel İş Akışı
Tüm üreticiler aynı deseni izler:
- Bir üretici ile bir Faker örneği oluşturun
- Üreticiyi yapılandırın (isteğe bağlı)
- Depolama hedefini belirleyin
- Eşzamanlılık ve sayı ayarlarını 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) // Deterministik çı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 Opsiyonları
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ı
concurrency() yöntemi ile paralel yürütmeyi kontrol edin:
// 10 işçi ipliği/procesi kullanFaker::make(Png::class) ->concurrency(10) ->generate(); // Swoole'e özel: Her iplikte hem iplik hem de koaratin ayarlaFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8) // 4 işçi, her biri 8 koaratin ->generate();
Dosya İsimlendirme
Varsayılan İsimlendirme
Varsayılan olarak dosyalar UUID v4 kullanılarak adlandırılır:
// Şunu üretir: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
Yerleşik İsim Üreticileri
use DefectiveCode\Faker\NameGenerator; // UUID tabanlı (varsayılan)NameGenerator::setDefault('uuid'); // Şunu üretir: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // Sıralı numaralandırmaNameGenerator::setDefault('sequence'); // Şunu üretir: 1.png, 2.png, 3.png, ...
Özelleştirilmiş İsimlendirme
Dosya adlarını ö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 tabanlı isimlendirmeFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
Yeniden Üretilebilirlik İçin Tohumlama
Aynı dosyaları farklı çalıştırmalarda üretmek 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 deterministik bir tohum alır.
Ü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 Üreticisi
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) // Paragraf başına 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 Üreticisi
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 kapama ->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) // Paragraf başına cümleler ->withAttachment(Png::class, 1, 3) // 1-3 PNG ekleri ekleyin ->toDisk($filesystem) ->generate();
E-posta Başlıkları
Oluşturulan e-postalar şunları içerir:
To: Rastgele isim ve e-postaFrom: Rastgele isim ve e-postaSubject: Rastgele cümleDate: Geçerli zaman damgasıMessage-ID: Tohuma dayalı deterministik ID
Eklerle E-posta
Dosyaları, üretici sınıf adlarını veya örneklerini 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 ekleri ->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--
Gelişmiş Kullanım
Özel Üreticiler
Generator arayüzünü uygulayarak kendi üreticilerinizi oluşturun:
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 burada $data = $this->faker->randomElement(['foo', 'bar', 'baz']); $stream = fopen('php://temp', 'w+'); fwrite($stream, $data); return $stream; }} // Özel üreticinizi kullanınFaker::make(MyCustomGenerator::class) ->toDisk($filesystem) ->generate();
Yapılandırma Sınıfları
Her üretici, Config sınıfını genişleten 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ı kurun
- Eşzamanlılığı Ayarlayın: İplik sayısını CPU çekirdekleriyle eşleştirin
- Toplu İşlemler: Birden çok küçük çalıştırma yerine büyük gruplar oluşturun
- Depolama Yeri: Geçici dosyalar için hızlı depolama (SSD, yerel disk) kullanın
- Ağ G/Ç: S3 kullanıyorsanız, 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 hedefini ayarlayın (gerekli):
Faker::make(Png::class) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
basePath(string $basePath): Faker
Dosya sisteminde temel yolu ayarlayın:
Faker::make(Png::class) ->basePath('images/uploads') // Dosyalar /storage/images/uploads/ içinde saklanacak
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'e özgü: iplikler ve her iplik başına koaratinlerFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): Faker
Deterministik üretim için tohum ayarlayın:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): Faker
Dosya adlandırmayı ö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 üretimini 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.