English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Uvod
- Instalacija
- Upotreba
- Generatori
- Napredna Upotreba
- Konfiguracija
- Smjernice za podršku
- Licenca - MIT Licenca
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
- Visoko-performantna konkurentnost: Automatski odabir između Swoole (kooperativne) i PCNTL (forking procesa) za paralelno generisanje datoteka
- Više generatora datoteka: Ugrađena podrška za slike, tekst, CSV, binarne i e-mail datoteke
- Deterministički izlaz: Generisanje zasnovano na seed-ovima osigurava reproduktivne rezultate
- Fleksibilno skladištenje: Radi sa bilo kojim League Flysystem adapterom (lokalni, S3, itd.)
- Prilagodljivo imenovanje datoteka: Generisanje imena putem closures sa potpunom kontrolom
- Podrška za slike: Više formata sa konfigurisanim dimenzijama i kompresijom
- Generisanje e-mailova: RFC822-usaglašeni 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 konkurentnih radnikaFaker::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 datotekeuse 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 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('/path/to/storage'))) ->count(100) ->generate();
Instalacija
Instalirajte paket putem Composer-a:
composer require defectivecode/faker-storage
Zahtevi
- PHP >= 8.4
- ext-gd (za generisanje slika)
- ext-swoole (opciono, za bolje performanse)
- ext-pcntl (rezerva za konkurentnost)
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:
- Kreirajte Faker instancu sa generatorom
- Konfigurišite generator (opcionalno)
- Postavite odredište za skladištenje
- Konfigurišite konkurentnost i broj
- 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/procesaFaker::make(Png::class) ->concurrency(10) ->generate(); // Specifično za Swoole: Postavite i niti i korutine po nitiFaker::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.pngFaker::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 numerisanjeNameGenerator::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 closureFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Imenovanje na osnovu datumaFaker::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:
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 seedu
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 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 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 generatorFaker::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
- Koristite Swoole: Instalirajte Swoole ekstenziju za najbolje performanse
- Podesite Konkurentnost: Uskladite broj niti sa brojem CPU jezgara za optimalan protok
- Batch Operacije: Generišite velike serije umesto više malih pokretanja
- Lokacija Skladištenja: Koristite brze diskove (SSD, lokalni disk) za privremene datoteke pre učitavanja
- 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 konkurentnostFaker::make(Png::class) ->concurrency(4) // Specifično za Swoole: niti i korutineFaker::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.