English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Introduction
- Instalacija
- Korišćenje
- Generatori
- Napredna Korišćenja
- Konfiguracija
- Smjernice za podršku
- Licenca - MIT Licenca
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
- Visoka Performansa Paralelizam: Automatski izbor između Swoole (kooperacije) i PCNTL (forkovanje procesa) za paralelno generisanje fajlova
- Više Generatora Fajlova: Ugrađena podrška za slike, tekst, CSV, binarne fajlove i e-mailove
- Deterministički Izlaz: Generacija zasnovana na semenu osigurava reproduktibilne rezultate
- Fleksibilno Skladištenje: Radi sa bilo kojim League Flysystem adapterom (lokalno, S3, itd.)
- Prilagodljivo Imenovanje Fajlova: Generisanje imena zasnovano na zatvorenom obliku sa potpunom kontrolom
- Podrška za Slike: Više formata sa konfigurisanim dimenzijama i kompresijom
- Generacija E-maila: RFC822-kompatibilni e-mailovi sa prilozima i MIME podrškom
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 radnikaFaker::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 fajloveuse 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 prilozimause 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
- PHP >= 8.4
- ext-gd (za generaciju slika)
- ext-swoole (opciono, za bolje performanse)
- ext-pcntl (rezervni za paralelizam)
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:
- Kreirajte Faker instancu sa generatorom
- Konfigurišite generator (opciono)
- Postavite odredišnu lokaciju za skladištenje
- Konfigurišite paralelizam i broj
- 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/procesaFaker::make(Png::class) ->concurrency(10) ->generate(); // Swoole-specifično: Postavi obe niti i kooperacije po nitiFaker::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.pngFaker::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 numerisanjeNameGenerator::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 funkcijaFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Imenovanje zasnovano na datumuFaker::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:
To: Nasumično ime i e-mailFrom: Nasumično ime i e-mailSubject: Nasumična rečenicaDate: Trenutni vremenski pečatMessage-ID: Deterministički ID zasnovan na semenu
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 tomorrowDate: Fri, 03 Jan 2026 10:30:00 +0000Message-ID: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>Content-Type: multipart/mixed; boundary="----=_Part_123" ------=_Part_123Content-Type: text/plain; charset=utf-8Content-Transfer-Encoding: quoted-printable Lorem ipsum dolor sit amet, consectetur adipiscing elit... ------=_Part_123Content-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 generatorFaker::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
- Koristite Swoole: Instalirajte Swoole ekstenziju za najbolje performanse
- Podesite Paralelizam: Povećajte broj niti prema CPU jezgrama za optimalni način rada
- Batch Operacije: Generišite velike nizove umesto više malih pokretanja
- Lokacija Skladišta: Koristite brze diskove (SSD, lokalni disk) za privremene fajlove pre otpremanja
- 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 paralelizamFaker::make(Png::class) ->concurrency(4) // Swoole-specifično: niti i kooperacijeFaker::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.