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

Introduction

Faker Storage je paket za PHP visoke performanse dizajniran za efikasno generisanje i skladištenje velikih količina lažnih podataka. Sgrađen s obzirom na konkurenciju, koristi Swoole ili PCNTL za generisanje hiljada fajlova paralelno, što ga čini idealnim za testiranje opterećenja, razvojne okruženja i benchmark skladišnih sistema.

Paket pruža fluentni API za generisanje različitih tipova fajlova uključujući slike (PNG, JPG, GIF, BMP, WEBP, AVIF), tekstualne fajlove, CSV fajlove, binarne podatke i RFC822-usaglašene emailove. Svaki generator proizvodi deterministički izlaz kada se zasadi, obezbeđujući ponovljive testne podatke širom okruženja.

Ključne Karakteristike

Primer

use DefectiveCode\Faker\Faker;
use League\Flysystem\Filesystem;
use DefectiveCode\Faker\Generators\Png;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// Generiši 1000 PNG slika sa 10 konkurentnih radnika
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();
 
// Generiši CSV fajlove
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();
 
// Generiši emailove sa prilozima
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();

Instalacija

Instalirajte paket putem Composer-a:

composer require defectivecode/faker-storage

Zahtevi

Opcione Zavistosti

Za optimalne performanse, instalirajte Swoole ekstenziju:

pecl install swoole

Paket će automatski koristiti Swoole ako je dostupan, inače će se osloniti na PCNTL.

Upotreba

Osnovni Tok Rada

Svi generatori prate isti obrazac:

  1. Kreirajte Faker instancu sa generatorom
  2. Konfigurišite generator (opciono)
  3. Postavite odredište za skladištenje
  4. Konfigurišite konkurenciju i broj
  5. Generišite fajlove
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) // Specifična konfiguracija generatora
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
->basePath('documents') // Fajlovi će biti u /storage/documents/
->count(100) // Generiši 100 fajlova
->concurrency(4) // Koristi 4 radnika
->seed(123) // Za deterministički izlaz
->generate();

Konfiguracija Skladištenja

Koristeći Flysystem

Faker Storage koristi League Flysystem za apstrakciju skladištenja:

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

AWS S3 Skladište

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();

Opcije Diska

Prosledi dodatne opcije adapteru za skladištenje:

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

Konfiguracija Konkurencije

Kontroliši paralelno izvršavanje pomoću metode concurrency():

// Koristi 10 radnih niti/procesa
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Specifično za Swoole: Postavi i niti i korutine po niti
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // 4 radnika, 8 korutina svaka
->generate();

Ime Fajlova

Podrazumevano Ime

Po defaultu, fajlovi se imenuju koristeći UUID v4:

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

Ugrađeni Generatori Imena

use DefectiveCode\Faker\NameGenerator;
 
// Bazirano na UUID (podrazumevano)
NameGenerator::setDefault('uuid'); // Generiše: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// Sekvencijalno numerisanje
NameGenerator::setDefault('sequence'); // Generiše: 1.png, 2.png, 3.png, ...

Prilagodljivo Ime

Pružite closure za prilagodbu imena fajlova:

use DefectiveCode\Faker\NameGenerator;
 
// Prilagođena closure
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "custom-{$completedFiles}-{$seed}.png";
})
->generate();
 
// Imenovanje zasnovano na datumu
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return date('Y/m/d') . "/image-{$completedFiles}.png";
})
->generate();

Semenjenje za Ponovljivost

Postavite seme da generišete iste fajlove u različitim izvršavanjima:

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

Svaki fajl dobija jedinstveno determinističko seme izvedeno iz osnovnog semena i indeksa fajla.

Generatori

Generatori Slika

Svi generatori slika podržavaju konfiguraciju dimenzija i kvaliteta.

PNG

use DefectiveCode\Faker\Generators\Png;
 
Faker::make(Png::class)
->width(800, 1920) // Nasumična širina između 800-1920px
->height(600, 1080) // Nasumična visina između 600-1080px
->withAlpha(true) // Omogući alfa/transparenciju
->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac
->toDisk($filesystem)
->generate();

JPG

use DefectiveCode\Faker\Generators\Jpg;
 
Faker::make(Jpg::class)
->width(800, 1920) // Nasumična širina između 800-1920px
->height(600, 1080) // Nasumična visina između 600-1080px
->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac
->toDisk($filesystem)
->generate();

GIF

use DefectiveCode\Faker\Generators\Gif;
 
Faker::make(Gif::class)
->width(800, 1920) // Nasumična širina između 800-1920px
->height(600, 1080) // Nasumična visina između 600-1080px
->withAlpha(true) // Omogući alfa/transparenciju
->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac
->toDisk($filesystem)
->generate();

BMP

use DefectiveCode\Faker\Generators\Bmp;
 
Faker::make(Bmp::class)
->width(800, 1920) // Nasumična širina između 800-1920px
->height(600, 1080) // Nasumična visina između 600-1080px
->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac
->toDisk($filesystem)
->generate();

WEBP

use DefectiveCode\Faker\Generators\Webp;
 
Faker::make(Webp::class)
->width(800, 1920) // Nasumična širina između 800-1920px
->height(600, 1080) // Nasumična visina između 600-1080px
->withAlpha(true) // Omogući alfa/transparenciju
->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac
->toDisk($filesystem)
->generate();

AVIF

use DefectiveCode\Faker\Generators\Avif;
 
Faker::make(Avif::class)
->width(800, 1920) // Nasumična širina između 800-1920px
->height(600, 1080) // Nasumična visina između 600-1080px
->withAlpha(true) // Omogući alfa/transparenciju
->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac
->toDisk($filesystem)
->generate();

Nasumična Slika

Generiše sliku nasumičnog formata:

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

Generator Teksta

Generišite obične tekstualne fajlove sa paragrafima:

use DefectiveCode\Faker\Generators\Text;
 
Faker::make(Text::class)
->paragraphs(5, 10) // 5-10 paragrafa po fajlu
->sentences(3, 6) // 3-6 rečenica po paragrafu
->toDisk($filesystem)
->generate();

Primer Izlaza:

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 Generator

Generišite CSV fajlove sa nasumičnim podacima:

use DefectiveCode\Faker\Generators\Csv;
 
Faker::make(Csv::class)
->columns(5, 10) // 5-10 kolona
->rows(100, 500) // 100-500 redova
->delimiter(',') // Delimiter kolone
->enclosure('"') // Okvir polja
->escape('\\') // Karakter za izlaz
->eol("\n") // Kraj linije
->toDisk($filesystem)
->generate();

Primer Izlaza:

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

Binarni Generator

Generišite nasumične binarne podatke:

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

Generator Emailova

Generišite RFC822-usaglašene email fajlove:

use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5) // Paragrafi u telu emaila
->sentences(2, 4) // Rečenice po paragrafu
->withAttachment(Png::class, 1, 3) // Dodajte 1-3 PNG priloga
->toDisk($filesystem)
->generate();

Email Naslovi

Generisani emailovi uključuju:

Email sa Prilozima

Priložite fajlove koristeći nazive ili instance generatora:

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 priloga
->generate();
 
// Prilagodi korišćenjem konfigurisane instance generatora
$pngGenerator = new Png(Png::getDefaultConfig());
$pngGenerator->width(400, 800)->height(300, 600);
 
Faker::make(Email::class)
->withAttachment($pngGenerator, 2, 5)
->generate();

Primer Izlaza:

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

Napredna Upotreba

Prilagođeni Generatori

Kreirajte svoje generatore implementiranjem Generator interfejsa:

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
{
// Vaša logika generisanja ovde
$data = $this->faker->randomElement(['foo', 'bar', 'baz']);
 
$stream = fopen('php://temp', 'w+');
fwrite($stream, $data);
 
return $stream;
}
}
 
// Koristite svoj prilagođeni generator
Faker::make(MyCustomGenerator::class)
->toDisk($filesystem)
->generate();

Konfiguracione Klase

Svaki generator koristi konfiguracionu klasu koja proširuje Config:

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

Saveti za Performanse

  1. Koristite Swoole: Instalirajte Swoole ekstenziju za najbolje performanse
  2. Podesite Konkurenciju: Prilagodite broj niti broju CPU jezgara za optimalni protok
  3. Batch Operacije: Generišite velike grupe umesto više malih izvršavanja
  4. Lokacija Skladištenja: Koristite brzo skladište (SSD, lokalni disk) za privremene fajlove pre otpremanja
  5. Mrežni I/O: Kada koristite S3, povećajte konkurenciju da maksimalno iskoristite propusnost

Konfiguracija

Globalne Metode Konfiguracije

Ove metode su dostupne na svim Faker instancama:

make(string $generator): Faker

Kreirajte novu Faker instancu sa datim generatorom:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

Postavite odredište skladištenja (potrebno):

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

basePath(string $basePath): Faker

Postavite osnovnu putanju unutar skladišta:

Faker::make(Png::class)
->basePath('images/uploads') // Fajlovi će biti smešteni u /storage/images/uploads/

count(int $count): Faker

Postavite broj fajlova koji se generišu:

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

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

Konfigurišite paralelno izvršavanje:

// Osnovna konkurencija
Faker::make(Png::class)
->concurrency(4)
 
// Specifično za Swoole: niti i korutine
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8)

seed(int $seed): Faker

Postavite seme za determinističko generisanje:

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

nameGenerator(Closure $generator): Faker

Prilagodite imenovanje fajlova:

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

diskOptions(array $diskOptions): Faker

Prosledite opcije adapteru za skladištenje:

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

generate(): void

Izvršite generisanje fajlova:

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

دعم الإرشادات

شكرًا لاختيارك حزمة المصادر المفتوحة الخاصة بنا! يرجى أخذ لحظة للاطلاع على هذه الإرشادات للدعم. ستساعدك في تحقيق أقصى استفادة من مشروعنا.

الدعم المدفوع من المجتمع

مشروعنا مفتوح المصدر مدفوع بمجموعتنا الرائعة. إذا كان لديك أي أسئلة أو تحتاج إلى مساعدة، فإن StackOverflow و موارد الإنترنت الأخرى هي أفضل خيارات لك.

الأخطاء، وأولويات الميزات

واقع إدارة مشروع مفتوح المصدر يعني أننا لا نستطيع معالجة كل خطأ تم الإبلاغ عنه أو طلب ميزة على الفور. نحن نعطي الأولوية للقضايا بالترتيب التالي:

1. الأخطاء التي تؤثر على منتجاتنا المدفوعة

تعتبر الأخطاء التي تؤثر على منتجاتنا المدفوعة دائمًا في قمة أولوياتنا. في بعض الحالات، قد نكتفي بمعالجة الأخطاء التي تؤثر علينا مباشرة.

2. طلبات السحب الخاصة بالمجتمع

إذا كنت قد حددت خطأ ولديك حل، يرجى تقديم طلب سحب. بعد القضايا التي تؤثر على منتجاتنا، نعطي الأولوية الأعلى لهذه الإصلاحات المدفوعة من المجتمع. بمجرد مراجعتها والموافقة عليها، سنقوم بدمج حلك ونذكر مساهمتك.

3. الدعم المالي

بالنسبة للقضايا خارج الفئات المذكورة، يمكنك اختيار تمويل حلها. كل قضية مفتوحة مرتبطة بنموذج طلب حيث يمكنك المساهمة ماليًا. نحن نعطي الأولوية لهذه القضايا بناءً على المبلغ المقدم من التمويل.

مساهمات المجتمع

تزدهر المصادر المفتوحة عندما يكون المجتمع نشطًا. حتى إذا لم تكن تقوم بإصلاح الأخطاء، قم بالتفكير في المساهمة من خلال تحسينات الكود، تحديثات الوثائق، الدروس التعليمية، أو من خلال مساعدة الآخرين في قنوات المجتمع. نحن نشجع الجميع، كمجتمع، على دعم العمل المفتوح المصدر.

للتأكيد، ستعطي DefectiveCode الأولوية للأخطاء بناءً على كيفية تأثيرها على منتجاتنا المدفوعة، وطلبات السحب الخاصة بالمجتمع، والدعم المالي المستلم للقضايا.

Lizenz - MIT Lizenz

Copyright © Defective Code, LLC. Alle Rechte vorbehalten

Hiermit wird kostenlos die Erlaubnis erteilt, an jede Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, mit der Software ohne Einschränkung umzugehen, einschließlich, aber nicht beschränkt auf die Rechte, die Software zu nutzen, zu kopieren, zu modifizieren, zu fusionieren, zu veröffentlichen, zu verteilen, Unterlizenzen zu erteilen und/oder Kopien der Software zu verkaufen, und Personen, denen die Software zur Verfügung gestellt wird, zu gestatten, dies zu tun, unter der Bedingung der folgenden Bedingungen:

Der obige Copyright-Hinweis und dieser Erlaubnishinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.

DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE GARANTIE, WELCHER ART, AUSDRÜCKLICH ODER IMPLIZIT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND KEINEN RECHTSBRUCH. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-RECHTHABER FÜR IRGENDEINEN ANSPRUCH, SCHÄDEN ODER SONSTIGE HAFTUNG HAFTBAR, UNABHÄNGIG DAVON, OB IN EINER KLAGE AUS VERTRAG, DELIKT ODER SONSTIGEM, ENTSTEHEND AUS, IM HINBLICK AUF ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN TRANSAKTIONEN IN DER SOFTWARE.