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 visokoperformantni PHP paket dizajniran da efikasno generiše i skladišti velike količine lažnih podataka. Izgrađen sa paralelizmom na umu, koristi Swoole ili PCNTL za generisanje hiljada fajlova paralelno, što ga čini idealnim za opterećenje testiranja, razvojne okruženja i merenje performansi skladišnih sistema.

Paket pruža tečan 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-kompatibilne e-mailove. Svaki generator proizvodi deterministički izlaz kada se koristi seme, osiguravajući reproduktivne test podatke u različitim okruženjima.

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 paralelnih radnika
Faker::make(Png::class)
->width(800, 1920)
->height(600, 1080)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/putanja/do/skladišta')))
->basePath('slike')
->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('/putanja/do/skladišta')))
->count(50)
->generate();
 
// Generiši e-mailove 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('/putanja/do/skladišta')))
->count(100)
->generate();

Instalacija

Instalirajte paket putem Composera:

composer require defectivecode/faker-storage

Zahtevi

Opcionalne Zavistnosti

Za optimalne performanse, instalirajte Swoole ekstenziju:

pecl install swoole

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

Korišćenje

Osnovni Tok Rada

Svi generatori prate isti obrazac:

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

Konfiguracija Skladišta

Korišćenje 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('/putanja/do/skladišta'));
 
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' => 'tvoj-kljuc',
'secret' => 'tvoj-tajni',
],
'region' => 'us-east-1',
'version' => 'latest',
]);
 
$adapter = new AwsS3V3Adapter($client, 'tvoje-ime-bucket-a');
$filesystem = new Filesystem($adapter);
 
Faker::make(Png::class)
->toDisk($filesystem)
->basePath('uploads/slike')
->generate();

Opcije Diskova

Prosledi dodatne opcije adapteru za skladište:

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

Konfiguracija Paralelizma

Kontroliši paralelno izvršavanje sa concurrency() metodom:

// Koristi 10 radnih niti/procesa
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Swoole-specifično: Postavi obe niti i kooperacije po niti
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // 4 radnika, 8 kooperacija svaki
->generate();

Imenovanje Fajlova

Podrazumevano Imenovanje

Podrazumevano, fajlovi se nazivaju 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;
 
// Zasnovano 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 Imenovanje

Obezbedite zatvorenu funkciju za prilagođavanje imena fajlova:

use DefectiveCode\Faker\NameGenerator;
 
// Prilagođena zatvorena funkcija
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();

Seme za Reproduktivnost

Postavi seme da generiše iste fajlove na više pokretanja:

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/kanal za transparentnost
->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/kanal za transparentnost
->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/kanal za transparentnost
->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/kanal za transparentnost
->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('"') // Ograničavanje polja
->escape('\\') // Karakter za eskapovanje
->eol("\n") // Kraj reda
->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 E-maila

Generišite RFC822-kompatibilne e-mail fajlove:

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

E-mail Headeri

Generisani e-mailovi uključuju:

E-mail sa Prilogom

Priloži fajlove koristeći imena 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();
 
// Priloži koristeći konfigurisanog 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 Korišćenja

Prilagođeni Generatori

Kreirajte svoje generatore implementacijom 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 generacije ovde
$data = $this->faker->randomElement(['foo', 'bar', 'baz']);
 
$stream = fopen('php://temp', 'w+');
fwrite($stream, $data);
 
return $stream;
}
}
 
// Koristite vaš 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 Paralelizam: Povećajte broj niti prema CPU jezgrama za optimalni način rada
  3. Batch Operacije: Generišite velike nizove umesto više malih pokretanja
  4. Lokacija Skladišta: Koristite brze diskove (SSD, lokalni disk) za privremene fajlove pre otpremanja
  5. Mrežno I/O: Kada koristite S3, povećajte paralelizam da maksimizujete korišćenje propusnosti

Konfiguracija

Globalne Metode Konfiguracije

Ove metode su dostupne na svim Faker instancama:

make(string $generator): Faker

Kreirajte novu Faker instancu sa specifikovanim generatorom:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

Postavite odredišnu lokaciju za skladištenje (neophodno):

Faker::make(Png::class)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/skladište')))

basePath(string $basePath): Faker

Postavite osnovnu putanju unutar skladišta:

Faker::make(Png::class)
->basePath('slike/uploads') // Fajlovi se skladište u /skladište/slike/uploads/

count(int $count): Faker

Postavite broj fajlova koje treba generisati:

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

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

Konfigurišite paralelno izvršavanje:

// Osnovni paralelizam
Faker::make(Png::class)
->concurrency(4)
 
// Swoole-specifično: niti i kooperacije
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8)

seed(int $seed): Faker

Postavite seme za determinističku generaciju:

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šte:

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

generate(): void

Izvršite generaciju fajlova:

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

Smjernice za podršku

Hvala što ste odabrali naš paket otvorenog koda! Molimo vas da odvojite trenutak da pregledate ove smjernice za podršku. Pomoći će vam da izvučete maksimum iz našeg projekta.

Podrška vođena zajednicom

Naš projekat otvorenog koda pokreće naša sjajna zajednica. Ako imate pitanja ili trebate pomoć, StackOverflow i ostali online resursi su najbolji izbor.

Greške i prioritizacija funkcionalnosti

Stvarnost upravljanja projektom otvorenog koda je da ne možemo odmah riješiti svaku prijavljenu grešku ili zahtjev za funkcionalnošću. Prioritizujemo probleme u sledećem redu:

1. Greške koje utiču na naše plaćene proizvode

Greške koje utiču na naše plaćene proizvode uvijek će biti naš najveći prioritet. U nekim slučajevima, možda ćemo se fokusirati samo na greške koje direktno utiču na nas.

2. Pull zahtjevi zajednice

Ako ste identificirali grešku i imate rešenje, molimo pošaljite pull zahtjev. Nakon problema koji utiču na naše proizvode, sledeći najveći prioritet daju se ovim ispravkama koje pokreće zajednica. Kada se pregledaju i odobre, spojit ćemo vaše rešenje i priznati vaš doprinos.

3. Finansijska podrška

Za probleme izvan pomenutih kategorija, možete se odlučiti da finansijski podržite njihovo rješavanje. Svaki otvoreni problem je povezan s narudžbenicom na kojoj možete financijski doprinijeti. Prioritizujemo ove probleme na osnovu iznosa finansiranja koji je pružen.

Doprinosi zajednice

Otvoreni kod napreduje kada je njegova zajednica aktivna. Čak i ako ne ispravljate greške, razmislite o doprinosu kroz poboljšanja koda, ažuriranja dokumentacije, tutorijale ili pomažući drugima u zajedničkim kanalima. Veoma ohrabrujemo sve, kao zajednicu, da pomognu u podršci radu otvorenog koda.

Ponovo naglašavamo, DefectiveCode će prioritetizovati greške na osnovu njihovog uticaja na naše plaćene proizvode, pull zahtjeve zajednice i finansijsku podršku primljenu za probleme.

Licenca - MIT Licenca

Autorska prava © Defective Code, LLC. Sva prava zadržana

Ovim se dozvoljava, bez naplate, svakoj osobi koja dobije kopiju ovog softvera i pripadajućeg dokumentacionog materijala (u daljem tekstu "Softver"), da se bavi Softverom bez ograničenja, uključujući, ali ne ograničavajući se na prava da koristi, kopira, modifikuje, spaja, objavljuje, distribuira, sublicencira i/ili prodaje kopije Softvera, te da omogući osobama kojima je Softver dostavljen da učine tako, pod sledećim uslovima:

Gore navedena autorska prava i ova dozvola moraju biti uključeni u sve kopije ili bitne delove Softvera.

SOFTVER SE DOSTAVLJA "KAKAV JESTE", BEZ GARANCIJE BILO KAKVE VRSTE, IZRIČITE ILI IMPLICIRANE, UKLJUČUJUĆI, ALI NE OGRANIČAVAJUĆI SE NA GARANCIJE PRODAJE, PRIKLADNOSTI ZA ODREĐENU NAMENU I NEPOŠTOVANJE PRAVA. U NIKAKVOM SLUČAJU AUTORI ILI NOSIOCI AUTORSKIH PRAVA NEĆE BITI ODGOVORNI ZA BILO KAKVE POTRAŽIVANJA, ŠTETE ILI DRUGE OBAVEZE, BEZ OBZIRA NA TO DA LI JE U PITANJU TUŽBA ZBOG UGOVORA, DELIKTA ILI DRUGIH RAZLOGA, PROIZAŠLE IZ, VAN ILI U VEZI SA SOFTVEROM ILI KORIŠĆENJEM ILI DRUGIM TRANSAKCIJAMA U VEZI SA SOFTVEROM.