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ı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

Ö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ştur
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ştur
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 e-postalar oluştur
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 kurun:

composer require defectivecode/faker-storage

Gereksinimler

İ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:

  1. Bir üretici ile bir Faker örneği oluşturun
  2. Üreticiyi yapılandırın (isteğe bağlı)
  3. Depolama hedefini belirleyin
  4. Eşzamanlılık ve sayı ayarlarını 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) // 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 kullan
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Swoole'e özel: Her iplikte hem iplik hem de koaratin ayarla
Faker::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.png
Faker::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ırma
NameGenerator::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ş closure
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "custom-{$completedFiles}-{$seed}.png";
})
->generate();
 
// Tarih tabanlı isimlendirme
Faker::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:

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 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--

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ın
Faker::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ı

  1. Swoole Kullanın: En iyi performans için Swoole uzantısını kurun
  2. Eşzamanlılığı Ayarlayın: İplik sayısını CPU çekirdekleriyle eşleştirin
  3. Toplu İşlemler: Birden çok küçük çalıştırma yerine büyük gruplar oluşturun
  4. Depolama Yeri: Geçici dosyalar için hızlı depolama (SSD, yerel disk) kullanın
  5. 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ık
Faker::make(Png::class)
->concurrency(4)
 
// Swoole'e özgü: iplikler ve her iplik başına koaratinler
Faker::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.