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

Çeviri Uyarısı

Bu belge otomatik olarak çevrilmiştir. Eğer çeviri hataları varsa lütfen projede pull request açın ve çevrilmiş dosyayı docs/{ISO 639-1 Kodu}.md dosyasına ekleyin.

Ekim 2023'e kadar olan verilerle eğitildiniz.

Giriş

Faker Storage, büyük hacimli 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 inşa edilmiştir ve binlerce dosyayı paralel olarak oluşturmak için Swoole veya PCNTL'den yararlanır, bu da onu yük testi, geliştirme ortamları ve depolama sistemi kıyaslamaları için ideal hale getirir.

Paket, resimler (PNG, JPG, GIF, BMP, WEBP, AVIF), metin dosyaları, CSV dosyaları, ikili veri 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 jeneratör, tohumlandığında belirleyici bir çıktı üretir ve bu da 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;
 
// 10 eşzamanlı işçi ile 1000 PNG resmi 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 ile 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, mevcutsa otomatik olarak Swoole'u kullanacak, aksi takdirde PCNTL'ye geri dönecektir.

Kullanım

Temel İş Akışı

Tüm jeneratörler aynı deseni takip eder:

  1. Bir Faker örneği oluşturun ve bir jeneratör seçin
  2. Jeneratörü yapılandırın (isteğe bağlı)
  3. Depolama hedefini ayarlayın
  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) // Jeneratöre ö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) // Belirli bir çıktı için
->generate();

Depolama Yapılandırması

Flysystem Kullanımı

Faker Depolama, 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 iletin:

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 iş parçacığı/prosesi kullan
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Swoole-özel: Hem iş parçacıklarını hem de iş parçacığı başına korotinleri ayarlayın
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // 4 işçi, her biri 8 korotin
->generate();

Dosya Adlandırma

Varsayılan Adlandırma

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

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

Yerleşik İsim Jeneratörleri

use DefectiveCode\Faker\NameGenerator;
 
// UUID tabanlı (varsayılan)
NameGenerator::setDefault('uuid'); // Üretir: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// Sıralı numaralandırma
NameGenerator::setDefault('sequence'); // Üretir: 1.png, 2.png, 3.png, ...

Özel Adlandırma

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

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

Tekrar Üretilebilirlik iç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 tohum ve dosya indeksinden türetilen benzersiz bir belirleyici tohum alır.

Üreteçler

Görüntü Üreteçleri

Tüm görüntü üreteçleri 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ı oluşturur:

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

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

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ütun ayırıcı
->enclosure('"') // Alan sınırlayı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 Üreteç

Rastgele ikili veri oluşturun:

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

E-posta Üreteci

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 eki ekle
->toDisk($filesystem)
->generate();

E-posta Başlıkları

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

Ekli E-posta

Dosyaları üreteç 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ış üreteç örneği kullanarak ekle
$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: Yarın önemli toplantı
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
{
// Burada üretim mantığınızı yazın
$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();

Konfigürasyon Sınıfları

Her üretici, Config sınıfını genişleten bir konfigürasyon 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: İdeal verimlilik için iş parçacığı sayısını CPU çekirdekleriyle eşleştirin
  3. Toplu İşlemler: Küçük birden fazla çalıştırma yerine büyük partiler oluşturun
  4. Depolama Konumu: Yüklemeden önce geçici dosyalar için hızlı depolama (SSD, yerel disk) kullanın
  5. Ağ G/Ç: S3 kullanırken, bant genişliği kullanımını en üst düzeye çıkarmak için eşzamanlılığı artırın

Ekim 2023'e kadar olan veriler üzerinde eğitildiniz.

Yapılandırma

Genel Yapılandırma Yöntemleri

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

make(string $generator): Faker

Belirtilen jeneratör 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 saklanı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-özel: iş parçacıkları ve korotinler
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 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 iletin:

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

generate(): void

Dosya üretimini gerçekleştirin:

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

Destek Yönergeleri

Açık kaynak paketimizi seçtiğiniz için teşekkürler! Lütfen bu destek yönergelerini incelemek için bir dakikanızı ayırın. Projemizden en iyi şekilde yararlanmanıza yardımcı olacaklar.

Topluluk Odaklı Destek

Açık kaynak projemiz harika topluluğumuz tarafından desteklenmektedir. 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 bir projeyi yönetmenin gerçeği, bildirilen her hatayı veya özellik isteğini hemen ele alamayacağımız anlamına gelir. Sorunları şu 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 bizi doğrudan etkileyen hataları ele alabiliriz.

2. Topluluk Çekme İstekleri

Bir hata tespit ettiyseniz ve bir çözümünüz varsa, lütfen bir çekme isteği 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ştirip katkınızı takdir edeceğiz.

3. Mali Destek

Belirtilen kategorilerin dışındaki sorunlar için, çözümün finanse edilmesini tercih edebilirsiniz. Her açık sorun, mali olarak 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üzeltmeseniz bile, kod iyileştirmeleri, belge güncellemeleri, eğitimler veya topluluk kanallarında başkalarına yardım ederek katkıda bulunmayı düşünün. Herkesi, bir topluluk olarak, açık kaynak çalışmasını desteklemeye teşvik ediyoruz.

Tekrar belirtmek gerekirse, DefectiveCode hataları, ücretli ürünlerimizi nasıl etkilediğine, topluluk çekme isteklerine ve sorunlar için alınan mali desteğe göre önceliklendirecektir.

Lisans - MIT Lisansı

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

Bu yazılımın ve ilgili dokümantasyon dosyalarının ("Yazılım") bir kopyasını edinen herkese, aşağıdaki koşullar altında, Yazılımı herhangi bir kısıtlama olmaksızın kullanma, kopyalama, değiştirme, birleştirme, yayınlama, dağıtma, alt lisans verme ve/veya Yazılımın kopyalarını satma hakları ücretsiz olarak verilmektedir ve bu kişilere Yazılımın sağlandığı kişilere de bu hakları vermelerine izin verilmektedir:

Yukarıdaki telif hakkı bildirimi ve bu izin bildirimi, Yazılımın tüm kopyalarına veya önemli bölümlerine dahil edilmelidir.

YAZILIM, HERHANGİ BİR TÜRDE, AÇIK VEYA ZIMNİ, TİCARİ ELVERİŞLİLİK, BELİRLİ BİR AMACA UYGUNLUK VE İHLAL ETMEME GARANTİLERİ DAHİL ANCAK BUNLARLA SINIRLI OLMAMAK ÜZERE, HERHANGİ BİR GARANTİ OLMAKSIZIN "OLDUĞU GİBİ" SAĞLANMAKTADIR. HİÇBİR DURUMDA YAZARLAR VEYA TELİF HAKKI SAHİPLERİ, SÖZLEŞME, HAKSIZ FİİL VEYA BAŞKA BİR ŞEKİLDE, YAZILIMDAN VEYA YAZILIMIN KULLANIMI VEYA DİĞER İŞLEMLERDEN KAYNAKLANAN HERHANGİ BİR TALEP, ZARAR VEYA DİĞER SORUMLULUKLARDAN SORUMLU OLMAYACAKTIR.