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

Uvod

Faker Storage je visoko-performantni PHP paket dizajniran za generisanje i skladištenje velikih količina lažnih podataka efikasno. Izgrađen sa koncepcijom konkurentnosti, koristi Swoole ili PCNTL za generisanje hiljada datoteka u paraleli, što ga čini idealnim za testiranje opterećenja, razvojna okruženja i benchmarkovanje skladišnih sistema.

Paket pruža fluent API za generisanje raznih tipova datoteka uključujući slike (PNG, JPG, GIF, BMP, WEBP, AVIF), tekstualne datoteke, CSV datoteke, binarne podatke i e-mailove usklađene sa RFC822. Svaki generator proizvodi deterministički izlaz kada je inicijalizovan sa seedom, obezbeđujući reproduktivne test 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 datoteke
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 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('/path/to/storage')))
->count(100)
->generate();

Instalacija

Instalirajte paket putem Composer-a:

composer require defectivecode/faker-storage

Zahtevi

Opciona Zavisnost

Za optimalne performanse, instalirajte Swoole ekstenziju:

pecl install swoole

Paket će automatski koristiti Swoole ako je dostupan, u suprotnom će se prebaciti na PCNTL.

Upotreba

Osnovni Radni Tok

Svi generatori slede isti obrazac:

  1. Kreirajte Faker instancu sa generatorom
  2. Konfigurišite generator (opcionalno)
  3. Postavite odredište za skladištenje
  4. Konfigurišite konkurentnost i broj
  5. Generišite datoteke
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') // Datoteke će biti u /storage/documents/
->count(100) // Generiši 100 datoteka
->concurrency(4) // Koristi 4 radnika
->seed(123) // Za deterministički izlaz
->generate();

Konfiguracija Skladištenja

Korišćenje Flysystema

Faker Storage koristi League Flysystem za apstrakciju skladištenja:

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

AWS S3 Skladištenje

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

Proslijedite dodatne opcije adapteru za skladištenje:

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

Konfiguracija Konkurentnosti

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

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

Imenovanje Datoteka

Zadano Imenovanje

Prema zadatku, datoteke su imenovane 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 (zadano)
NameGenerator::setDefault('uuid'); // Generiše: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// Sekvencionalno numerisanje
NameGenerator::setDefault('sequence'); // Generiše: 1.png, 2.png, 3.png, ...

Prilagođeno Imenovanje

Obezbedite closure za prilagođavanje imena datoteka:

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 na osnovu datuma
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return date('Y/m/d') . "/image-{$completedFiles}.png";
})
->generate();

Seeding za Reproduktivnost

Postavite seed da generišete iste datoteke kroz pokretanje:

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

Svaka datoteka dobija jedinstveni deterministički seed izveden iz osnovnog seeda i indeksa datoteke.

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 transparentnosti
->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 transparentnosti
->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 transparentnosti
->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 transparentnosti
->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 datoteke sa paragrafima:

use DefectiveCode\Faker\Generators\Text;
 
Faker::make(Text::class)
->paragraphs(5, 10) // 5-10 paragrafa po datoteci
->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 datoteke 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 kolona
->enclosure('"') // Enclosure polja
->escape('\\') // Karakter za escape
->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 datoteke e-maila usklađene sa RFC822:

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) // Dodajte 1-3 PNG priloga
->toDisk($filesystem)
->generate();

E-mail Glave

Generisani e-mailovi uključuju:

E-mail sa Prilogom

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

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žite koristeći konfigurisan generator instancu
$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 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 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();

Konfigurationske Klase

Svaki generator koristi konfiguracionu klasu koja nasleđuje 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 Konkurentnost: Uskladite broj niti sa brojem CPU jezgara za optimalan protok
  3. Batch Operacije: Generišite velike serije umesto više malih pokretanja
  4. Lokacija Skladištenja: Koristite brze diskove (SSD, lokalni disk) za privremene datoteke pre učitavanja
  5. Mrežni I/O: Kada koristite S3, povećajte konkurentnost da maksimizujete iskorišćenje propusnosti

Konfiguracija

Globalne Konfiguracione Metode

Ove metode su dostupne na svim Faker instancama:

make(string $generator): Faker

Kreirajte novu Faker instancu sa specifičnim generatorom:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

Postavite odredište skladištenja (neophodno):

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

basePath(string $basePath): Faker

Postavite osnovni put unutar datotečnog sistema:

Faker::make(Png::class)
->basePath('images/uploads') // Datoteke pohranjene u /storage/images/uploads/

count(int $count): Faker

Postavite broj generisanih datoteka:

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

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

Konfigurišite paralelno izvršavanje:

// Osnovna konkurentnost
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 seed za determinističko generisanje:

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

nameGenerator(Closure $generator): Faker

Prilagodite imenovanje datoteka:

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

diskOptions(array $diskOptions): Faker

Proslijedite opcije adapteru za skladištenje:

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

generate(): void

Izvršite generisanje datoteka:

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.